我目前正试图在iphone应用程序中使用一段用c++编写的代码。我已经阅读了关于使用ObjuleC++的C++代码包。我试图调用的c++函数接受参数2 std::string并返回std::string:

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

我从SWIFT调用ObjultC++函数
// 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类型的值转换为预期的参数类型performanceobjctocpluslus。
我想我得到的错误是因为我无法将swift的字符串类型转换为NSString*。
有办法解决这个问题吗?

最佳答案

您更需要执行对象而不是类方法:

    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的互操作性是免费的。
顺便说一下,我用的是Swift 2.2

关于c++ - 用Objective-C++包装C++代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36667780/

10-10 12:30