2016-04-16 4 views
1

В настоящее время я пытаюсь использовать кусок кода, который я написал на C++ в приложении iphone. Я прочитал об обертке кода на C++ с помощью объектного C++. функция с ++ я пытаюсь вызвать принимает аргументы 2 станд :: строки и возвращает зЬй :: строка:Обтекание C++-кодом с 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 

Я вызываю функцию Objective-C++ с быстрой

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

ошибки: Невозможно преобразовать значение типа NSString в ожидаемый тип аргумента PerformanceObjCtoCPlusPlus. Я думаю, что ошибка, которую я получаю, заключается в том, что я не могу преобразовать тип String в swift в 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 делает это для вас бесплатно.

BTW, я использую Swift 2.2

+0

Если это необходимо, я могу поделиться своим примером приложения, которое я использовал для анализа проблемы. –

+0

У меня возникла ошибка в строке let res = obj.runfoo (q + "*" + z). Ошибка: невозможно преобразовать значение типа «String» в ожидаемый тип аргумента »(UnsafePointer , UnsafePointer ) ' – Marwan

+0

Это странно. У меня нет такой проблемы. Можете ли вы проверить мое примерное приложение здесь: https://github.com/melifaro-/iOSSwiftSample –