[英]How to pass and return an object to a C++ function called from iOS Swift?
在我的 iOS 项目中,我想从我的 Swift 代码中调用一个 C++ function,它从我的 Swift 代码中获取一个 object 并返回另一个 object。
到目前为止,按照本教程并添加更多内容,我成功地调用了一个 C++ function,它采用一个简单的参数并返回一个字符串:
NativeLibWrapper.h
文件:#import <Foundation/Foundation.h>
@interface NativeLibWrapper : NSObject
- (NSString *) sayHello: (bool) boolTest;
@end
NativeLibWrapper.mm
文件:#import <Foundation/Foundation.h>
#import "NativeLibWrapper.h"
#import "NativeLib.hpp"
@implementation NativeLibWrapper
- (NSString *) sayHello: (bool) boolTest {
NativeLib nativeLib;
std::string retour = nativeLib.sayHello(boolTest);
return [NSString stringWithCString: retour.c_str() encoding: NSUTF8StringEncoding];
}
@end
NativeLib.hpp
文件:
#ifndef NativeLib_hpp
#define NativeLib_hpp
#include <stdio.h>
#include <string>
class NativeLib
{
public:
std::string sayHello(bool boolTest);
};
#endif /* NativeLib_hpp */
NativeLib.cpp
文件:#include "NativeLib.hpp"
std::string NativeLib::sayHello(bool boolTest)
{
return "Hello C++ : " + std::to_string(boolTest);
}
Runner/Runner/Runner-Bridging-Header.h
中添加以下内容:#import "NativeLibWrapper.h"
NativeLibWrapper().sayHello(true)
但是现在,假设我的 C++ sayHello()
function 将这种 object 作为参数(这样我就可以在 C++ 函数中访问它):
class TestAPOJO {
var value1 = ""
var value2 = false
}
并返回这种 object(从 C++ function 生成,然后映射到 Swift object,或类似的东西):
class TestBPOJO {
var value3 = 0.0
var value4 = false
}
我怎样才能做到这一点?
谢谢。
好的,这就是我为使其工作所做的工作:
TestAPOJO
和TestBPOJO
类:// TestAPOJO.h:
#import <Foundation/Foundation.h>
@interface TestAPOJO : NSObject
@property NSString *value1;
@property bool value2;
@end
// TestAPOJO.mm:
#import "TestAPOJO"
@implementation TestAPOJO
@end
TestAPOJOFromC
和TestBPOJOFromC
类:// TestAPOJOFromC.hpp:
#ifndef TestAPOJOFromC_hpp
#define TestAPOJOFromC_hpp
class TestAPOJOFromC
{
public:
TestAPOJOFromC();
~TestAPOJOFromC();
std::string value1;
bool value2;
};
#endif /* TestAPOJOFromC_hpp */
// TestBPOJOFromC.cpp:
#include "TestBPOJOFromC.hpp"
TestBPOJOFromC::TestBPOJOFromC()
{
value1 = "";
value2 = false;
}
TestBPOJOFromC::~TestBPOJOFromC() = default;
NativeLibWrapper.h
文件中,添加:
- (TestBPOJO *) getTestPOJOS: (TestAPOJO *) testAPOJO;
NativeLibWrapper.mm
文件中,添加:- (TestBPOJO *) getTestPOJOS: (TestAPOJO *) testAPOJO {
NativeLib nativeLib;
TestAPOJOFromC *testAPOJOFromC = new TestAPOJOFromC();
testAPOJOFromC->value1 = std::string([testAPOJO.value1 UTF8String]);
testAPOJOFromC->value2 = testAPOJO.value2;
TestBPOJOFromC * testBPOJOFromC = nativeLib.getTestPOJOS(testAPOJOFromC);
TestBPOJO *testBPOJO = [TestBPOJO new];
testBPOJO.value3 = testBPOJOFromC->value3;
testBPOJO.value4 = testBPOJOFromC->value4;
return testBPOJO;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.