【问题标题】:arrow operator in swiftswift中的箭头运算符
【发布时间】:2016-02-29 02:37:53
【问题描述】:

我正在尝试在 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 中存在与箭头运算符等效的东西,所以仍然可以初始化吗?我似乎找不到关于他特定主题的任何信息。

【问题讨论】:

    标签: swift objective-c-swift-bridge


    【解决方案1】:

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

    但 Swift 并没有这样区分。在类型声明的顶层声明的变量,在 Swift 中,一个属性;在幕后,存储的属性具有访问器方法,并且在获取/设置属性时会自动传递这些方法。没有单独的实例变量来获取/设置。

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

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

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

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

    【讨论】:

    • 感谢您快速而完整的回复。 SDK 不是我的,但我应该可以添加属性。
    猜你喜欢
    • 2014-01-30
    • 2012-12-04
    • 1970-01-01
    • 2012-04-19
    • 2019-07-20
    • 2012-10-12
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多