我有这个迅速的代码:

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/

10-16 22:13