c++ - 用 Objective-C++ 包装 C++ 代码

标签 c++ swift objective-c++ nsstringencoding type-conversion

我目前正在尝试在 iphone 应用程序中使用我用 C++ 编写的一段代码。我已经阅读了有关使用 objective-C++ 包装 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 调用 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 的 String 类型转换为 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)

还有一个观察结果——您不需要将 String 强制转换为 NSString。 Swift 与 Obj-C 的互操作性免费为您完成。

顺便说一句,我使用 Swift 2.2

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

相关文章:

c++ - 从整数 vector : function eigen 构造对角矩阵

ios - CRC16-CCITT计算

ios - 使用 CvVideoCamera 拍照

c++ - 用于树莓派的 C 语言 GPIO 编程

c++ - 奇怪的是,SFINAE 无法进行递归模板调用

ios - 快速将从用户照片中收集的 UIImage 引用到 Dict 中

xcode - bridge -swift.h 文件突然消失

objective-c - 在 Objective-C++ 代码中的 C++ 代码中编译 C 代码

iphone - 非 8 字节对齐内存访问导致运行 iOS 4.0 的 iPhone 3GS 上的内存访问冲突

c++ - 我在文件中有一个字符串 "abc=14,22 xyz=33, tdc=48"。我怎样才能把它分成字符串和它们在 C++ 中的相应值?