Using the latest Xcode 9 beta, I'm seemingly completely unable to access properties on Swift classes. Even odder, I can access the class itself to instantiate it or whatever, but completely unable to access properties on it.
So if I have this Swift class:
import UIKit
class TestViewController: UIViewController {
var foobar = true
}
And I try to do this:
TestViewController *testViewController = [[TestViewController alloc] init]; // success
testViewController.foobar; // error
What exactly am I doing wrong? New project with Xcode 9.
The rules for exposing Swift code to Objective-C have changed in Swift 4. Try this instead:
@objc var foobar = true
As an optimization, @objc
inference have been reduced in Swift 4. For instance, a property within an NSObject
-derived class, such as your TestViewController
, will no longer infer @objc
by default (as it did in Swift 3).
Alternatively, you could also expose all members to Objective-C at once using @objcMembers
:
@objcMembers class TestViewController: UIViewController {
...
}
This new design is fully detailed in the corresponding Swift Evolution proposal.