2016-04-16 4 views
1

私は現在、iphoneアプリケーションでC++で書いたコードを使用しようとしています。私はobjective-C++を使ってC++コードをラップすることについて読んだことがあります。Objective-C++で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 

私は迅速

// 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) 
    } 

エラーからのObjective-C++の関数を呼び出しています:私は呼び出ししようとしているのC++機能ははstd ::文字列を引数2のstd ::文字列を取得して返します。 NSString型の値を期待される引数型PerformanceObjCtoCPlusPlusに変換できません。 私は、swiftのString型をNSString *に変換できないため、エラーが発生していると思います。 この問題を解決する回避策はありますか?

+1

これを試しましたか? http://stackoverflow.com/questions/33118095/cannot-convert-value-of-type-string-to-expected-argument-type-error私は客観的なCに慣れていないが、私はrunfooは静的メソッドだとは思わない –

答えて

0

あなたではなく、クラスメソッドよりも、オブジェクトを実行する必要があります。

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) 

そして、もう一つ別の観測を - あなたはNSStringのにキャスト文字列を必要としません。 SwiftのObj-Cとの相互運用性は、あなたのために無料で行います。

私はスイフトを使用しています。

+0

これが必要な場合は、問題分析に使用したサンプルアプリケーションを共有できます。 –

+0

let res = obj.runfoo(q + "*" + z)行にエラーがあります。エラー: 'String'型の値を予想される引数型に変換できません '(UnsafePointer 、UnsafePointer )' – Marwan

+0

これは変です。私はそのような問題はありません。ここで私のサンプルアプリケーションをチェックすることができます:https://github.com/melifaro-/iOSSwiftSample –