3

我正在尝试在 swift 项目中采用用objective-c 编写的SDK。初始化SDK的objective-c方式如下:

@implementation ViewController
nokeSDK *nokelock;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //INITIALIZE NOKE SDK
    nokelock = [[nokeSDK alloc] init];
    nokelock->cmd = [[nokecommand alloc] init];

我不相信 swift 中有与箭头运算符等效的东西,所以仍然可以初始化吗?我似乎找不到有关他特定主题的任何信息。

4

1 回答 1

1

在 Objective-C 中,属性只是访问器方法的语法糖。如果通常情况下,这些是实例变量的前面,您可以通过正确的隐私访问,绕过访问器方法(或首先没有它们)并直接获取/设置实例变量。这就是你的代码正在做的事情。

但斯威夫特并没有画出这种区别。在 Swift 中,在类型声明的顶层声明的变量一个属性;在幕后,存储的属性具有访问器方法,当您获取/设置属性时,您会自动通过这些方法。没有单独的实例变量来获取/设置。

要明白我的意思,请使用 Thing 类创建一个混合 Swift / Objective-C 应用程序,其界面如下所示:

@interface Thing : NSObject {
    @public
    NSString* s;
}

现在创建生成的界面。你会看到,在 Swift 中,s是无处可寻的。

因此,据推测,要重写代码,您需要cmd转换为属性,或者至少提供一个 setter 方法。否则,Swift 将永远无法设置 Objective-Ccmd实例变量。当然,如果你也可以nokeSDK用 Swift 重写,那么你的问题就已经解决了,因为你现在可以做任何你喜欢的事情了。

于 2016-02-29T02:45:24.750 回答