用 Objective-C++ 包装 C++ 代码
Wrapping a c++ code with Objective-C++
我目前正在尝试在 iphone 应用程序中使用我用 C++ 编写的一段代码。我已经阅读了有关使用 objective-C++ 包装 C++ 代码的内容。我试图调用的 c++ 函数接受参数 2 std::string 和 returns a 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
调用 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。
我认为我收到的错误是因为我无法将 swift 的字符串类型转换为 NSString*。
有解决这个问题的方法吗?
您更需要执行对象而不是 class 方法:
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)
还有一个观察结果 - 您不需要将 String 强制转换为 NSString。 Swift 与 Obj-C 的互操作性是免费的。
顺便说一句,我使用 Swift 2.2
我目前正在尝试在 iphone 应用程序中使用我用 C++ 编写的一段代码。我已经阅读了有关使用 objective-C++ 包装 C++ 代码的内容。我试图调用的 c++ 函数接受参数 2 std::string 和 returns a 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
调用 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。 我认为我收到的错误是因为我无法将 swift 的字符串类型转换为 NSString*。 有解决这个问题的方法吗?
您更需要执行对象而不是 class 方法:
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)
还有一个观察结果 - 您不需要将 String 强制转换为 NSString。 Swift 与 Obj-C 的互操作性是免费的。
顺便说一句,我使用 Swift 2.2