`@objc(ViewController)`做什么?

时间:2016-02-06 16:39:35

标签: ios swift uiviewcontroller google-analytics

我有这个快速的代码:

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)

1 个答案:

答案 0 :(得分:0)

来自Swift Type Compatibility

  

如果您的Swift类没有继承,您可以使用@objc属性   来自Objective-C类,或者如果要更改a的名称   接口中的符号,因为它暴露在Objective-C代码中。

此代码:

@objc(ViewController)

Importing Swift into Objective-C

中所述,当通过生成的头导入到Objective-C代码中时,将导致该属性后面的类在括号中具有名称。
  

将Swift代码从同一目标导入Objective-C

     
      
  • 将该目标的Swift代码导入任何Objective-C .m文件   在该目标内使用此语法并替换相应的   名:

         

    #import "ProductModuleName-Swift.h"

  •