使用最新的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中有详细说明。