gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:31 26 4
gpt4 key购买 nike

我正在尝试从 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

问题出在这里,你可能已经猜到了

enter image description here

我对 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 不是类,它是 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 是没有意义的 - 只需“普通”使用它即可。

关于c++ - Swift - 使用 Objective-C 包装器调用 C++ 文件 - 传递 Int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com