Swift与Objective-C API交互(三)

前端之家收集整理的这篇文章主要介绍了Swift与Objective-C API交互(三)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Swift类型兼容性

定义一个继承自NSObject或者其他Objective-C的类,它自动与Objective-C兼容。如果你不需要将Swift对象导入Objective-C代码的话,没必要关注类型的兼容性。但是如果在Swift中定义的类不是Objective-C类的子类,在Objective-C中使用的时候,需要用@objc进行说明。

@objc使得Swift的API可以在Objective-C和它的运行时中使用。当使用@IBOutlet@IBAction或者@NSManaged属性时,自动添加@objc属性

@objc还可以用来指定Swift中的属性方法在Objective-C中的名字,比如Swift支持Unicode名字,包括使用中文等Objective-C不兼容的字符。还有给Swift中定义的函数指定一个Selectorde名字。

@objc(Squirrel)
class 长沙戴维营教育 {
    @objc(hideNuts:inTree:)
    func 欢迎光临(Int,姓名: String) {
        /* ... */
    }
}

@objc(<#name#>)属性作用在Swift的类上时,这个类在Objective-C的使用不受命名空间的限制。同样,在Swift中解归档Objective-C归档的对象时,由于归档对象中存放有类名,因此需要在Swift中用@objc<#name>说明Objective-C的类名。

Objective-C选择器(Selector)

Objective-C的选择器是方法的一个引用。在Swift中对应的是Selector结构体。使用字符串字面量可以构建一个选择器对象,如let mySelector: Selector = "tappedButton:"。由于字符串字面常量可以自动转换为选择器对象,因此可以在任何需要传递选择器的地方使用字符串字面常量。

<code class="ocaml hljs" data-origin="" <pre><code="" uikit"="" style="margin: 0px; padding: 0px; border: 0px; font-size: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(110,107,94); font-family: Consolas,monospace !important;">import UIKit
class MyViewController: UIViewController {
    let myButton = UIButton(frame: CGRect(x: 0,y: 100,height: 50))

    init(nibName nibNameOrNil: String!,bundle nibBundleOrNil: NSBundle!)
    {
        super.init(nibName: nibName,bundle: nibBundle)
        myButton.targetForAction("tappedButton:",withSender: self)
    }

    func tappedButton(sender: UIButton!) {
        println("tapped button")
    }
}

提示
performSelector:以及相关的调用选择器的方法没有被引入到Swfit中来,因为它们不是完全安全的。

如果Swift类继承自Objective-C的类,则它里面的方法属性都能够作为Objective-C的选择器使用。而如果不是Objective-C的子类,需要使用@objc属性修饰,这个在前面的Swift类型兼容性中有描述。

原文链接:https://www.f2er.com/swift/327524.html

猜你在找的Swift相关文章