然后我尝试用整数值做同样的事情,我在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不是一个类,它是一个longde的typedef,所以只需按原样使用它.你可以做到
- (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”.
总结以上是内存溢出为你收集整理的Swift – 使用Objective-C包装器调用C文件 – 传递Int值全部内容,希望文章能够帮你解决Swift – 使用Objective-C包装器调用C文件 – 传递Int值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)