使用最新的Xcode 9 beta,我似乎完全无法访问Swift类的属性。更奇怪的是,我可以访问类本身来实例化它或其他什么,但是完全不能访问它的属性。
所以如果我有这个速成班:

import UIKit

class TestViewController: UIViewController {
    var foobar = true
}

我试着这样做:
TestViewController *testViewController = [[TestViewController alloc] init]; // success
testViewController.foobar; // error

我到底做错了什么?Xcode 9的新项目。

最佳答案

在Swift 4中,向Objective-C公开Swift代码的规则发生了变化。请改为:

@objc var foobar = true

作为优化,Swift 4中的@objc推理被减少。例如,默认情况下,NSObject派生类中的属性(如您的TestViewController)将不再推断@objc(正如在Swift 3中所做的那样)。
或者,也可以使用@objcMembers,将所有成员同时暴露给Objective-C:
@objcMembers class TestViewController: UIViewController {
    ...
}

这种新设计在the corresponding Swift Evolution proposal中有详细说明。

10-04 15:11