2016-04-16 2 views
1

J'essaie actuellement d'utiliser un morceau de code que j'ai écrit en C++ dans une application iphone. J'ai lu à propos de l'emballage du code C++ en utilisant Objective-C++. la fonction C++ Je suis en train d'appeler prend pour arguments 2 std :: string et retourne un std :: string:Habillage d'un code C++ avec Objective-C++

// ObjCtoCPlusPlus.mm 
#import <Foundation/Foundation.h> 
#include "CPlusPlus.hpp" 
#import "ObjCtoCPlusPlus.h" 

@implementation Performance_ObjCtoCPlusPlus : NSObject 

- (NSString*) runfoo: (NSString*)list 
{ 
     std::string nodelist = std::string([[list componentsSeparatedByString:@"*"][0] UTF8String]); 
     std::string lines = std::string([[list componentsSeparatedByString:@"*"][1] UTF8String]); 
     std::string result = Performance_CPlusPlus::run(nodelist, lines); 
     return [NSString stringWithCString:result.c_str() 
         encoding:[NSString defaultCStringEncoding]]; 
} 
- (void) exp 
{ 
    Performance_CPlusPlus::explanation(); 
} 
@end 

J'appelle la fonction objective-C++ de rapide

// I am calling the function from the viewController.swift 

@IBAction func button(sender: AnyObject) { 
     let z : String = "0 1/1 2"; 
     let q : String = "a b Y"; 
     let x = Performance_ObjCtoCPlusPlus.runfoo((q + "*" + z) as NSString) 
    } 

erreur: Impossible de convertir la valeur de type NSString en type d'argument attendu PerformanceObjCtoCPlusPlus. Je pense que l'erreur que je reçois est due au fait que je ne peux pas convertir le type String de swift en NSString *. y a-t-il une solution pour résoudre ce problème?

+1

Avez-vous essayé? http://stackoverflow.com/questions/33118095/cannot-convert-value-of-type-string-to-expected-argument-type-error Je ne suis pas familier avec l'objectif c, mais je ne pense pas que runfoo soit une méthode statique –

Répondre

0

Vous devez plutôt effectuer objet que méthode de classe:

let z : String = "0 1/1 2"; 
    let q : String = "a b Y"; 

    let obj = Performance_ObjCtoCPlusPlus() 
    let res = obj.runfoo(q + "*" + z) 

    print(res) 

Et une autre observation - vous n'avez pas besoin jeter chaîne à NSString. L'interopérabilité de Swift avec Obj-C le fait pour vous gratuitement.

BTW, j'utilise Swift 2.2

+0

Si cela est nécessaire, je peux partager mon exemple d'application, que j'ai utilisé pour l'analyse des problèmes. –

+0

J'ai une erreur sur la ligne let res = obj.runfoo (q + "*" + z). Erreur: Impossible de convertir la valeur de type 'String' en type d'argument attendu '(UnsafePointer , UnsafePointer )' – Marwan

+0

C'est étrange. Je n'ai pas de problème. Pouvez-vous consulter mon exemple d'application ici: https://github.com/melifaro-/iOSSwiftSample –