簡體   English   中英

Swift - 使用Objective-C包裝器調用C ++文件 - 傳遞Int值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM