Swift – 使用Objective-C包装器调用C文件 – 传递Int值

Swift – 使用Objective-C包装器调用C文件 – 传递Int值,第1张

概述我正在玩 Swift项目调用c方法.我使用 this教程来设置和获取字符串值,完美地工作. 然后我尝试用整数值做同样的事情,我在objective-c包装器类中遇到了一些问题. #import <Foundation/Foundation.h>#import "TestCppClassWrapper.h"#include "TestCppClass.h"@interface TestCppC 我正在玩 Swift项目调用c方法.我使用 this教程来设置和获取字符串值,完美地工作.

然后我尝试用整数值做同样的事情,我在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值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存