[英]Swift - calling C++ files using Objective-C wrapper - passing Int values
我正在玩Swift项目调用c ++方法。 我使用本教程来设置和获取字符串值,完美地工作。
然后我尝试用整数值做同样的事情,我在objective-c包装器类中遇到了一些问题。
#import <Foundation/Foundation.h>
#import "TestCppClassWrapper.h"
#include "TestCppClass.h"
@interface TestCppClassWrapper()
@property TestCppClass *cppItem;
@end
@implementation TestCppClassWrapper
- (instancetype)initWithTitle:(NSString*)title: (NSInteger*)variable
{
if (self = [super init]) {
self.cppItem = new TestCppClass(std::string([title cStringUsingEncoding:NSUTF8StringEncoding]), std::uintptr_t(variable));
}
return self;
}
- (NSString*)getTitle
{
return [NSString stringWithUTF8String:self.cppItem->getTtile().c_str()];
}
- (void)setTitle:(NSString*)title
{
self.cppItem->setTitle(std::string([title cStringUsingEncoding:NSUTF8StringEncoding]));
}
- (NSInteger*)getVariable
{
return [NSInteger self.cppItem->getVariable()];
}
- (void)setVariable:(NSInteger*)variable
{
self.cppItem->setVariable(std::NSInteger(variable));
}
@end
你可能已经猜到了,这里出现了问题
我既不熟悉obj-c也不熟悉c ++,这就是为什么我无法弄清楚究竟应该如何处理类型,字符串是个别情况(编码和东西),所以我很难理解它到Int。
#include "TestCppClass.h"
TestCppClass::TestCppClass() {}
TestCppClass::TestCppClass(const std::string &title, const std::int8_t &variable): m_title(title), m_variable(variable) {}
TestCppClass::~TestCppClass() {}
void TestCppClass::setTitle(const std::string &title)
{
m_title = title;
}
void TestCppClass::setVariable(const std::int8_t &variable)
{
m_variable = variable * 2;
}
const std::string &TestCppClass::getTtile()
{
return m_title;
}
const std::int8_t &TestCppClass::getVariable()
{
return m_variable;
}
提前致谢
NSInteger
不是一类,它是一个typedef long
,所以只是用它原样。
你可以做到
- (instancetype)initWithTitle:(NSString*)title: (NSInteger)variable
{
if (self = [super init]) {
self.cppItem = new TestCppClass(std::string([title cStringUsingEncoding:NSUTF8StringEncoding]), variable);
}
return self;
}
- (NSInteger) getVariable
{
return self.cppItem->getVariable();
}
- (void)setVariable:(NSInteger)variable
{
self.cppItem->setVariable(variable);
}
但是你会在setter中获得一个缩小的转换。
(我不确定这是一个问题,还是NSInteger
对你的Swift界面至关重要。)
并且通过引用传递std::int8_t
是没有意义的 - 只需使用它“plain”。
NSInteger(variable)
是一种Objective C方法,有效地在全局命名空间中。 它不在std
命名空间中。 省略std::
part。
TestCppClass
类的接口是TestCppClass
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.