我有这个迅速的代码:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
...
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateInitialViewController()!
if (controller is InlineMainViewController ){
mainViewController = controller as! InlineMainViewController
}
window?.rootViewController = controller
window?.makeKeyAndVisible()
}
当我的viewController具有以下属性时:
@objc(ViewController) // match the ObjC symbol name inside Storyboard
public class InlineMainViewController: UIViewController,
(controller is InlineMainViewController )
返回false
当它不具有此属性时:
public class InlineMainViewController: UIViewController,
(controller is InlineMainViewController )
返回true
我的
Main.sotryboard
已连接到InlineMainViewController
我从Google Analytics(分析)github示例中获取了
@objc(ViewController)
最佳答案
来自Swift Type Compatibility
如果您的Swift类未继承,则可以使用@objc
属性
从Objective-C类中获取,或者如果您想更改
暴露给Objective-C代码的界面中的符号。
这段代码:
@objc(ViewController)
通过生成的标头将其导入到Objective-C代码时,将导致该属性之后的类在括号中具有名称,如Importing Swift into Objective-C中所述
将Swift代码从同一目标导入到Objective-C
从该目标导入Swift代码到任何Objective-C .m文件
在目标中使用此语法并替换适当的
名称:
#import "ProductModuleName-Swift.h"
关于ios - @objc(ViewController)有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35243508/