斯威夫特如何穿越客观海(第1部分)
Objective-C是一个流动性很强的实体,它不会很快消失。 尽管Swift的机翼可以帮助它在天空中飞翔,但它有时可能会潜入Objective-C捕捉食物。
这是一系列Swift和Objective-c互操作性块的开始。
Swift向Objective-C公开了自己的私人代码
Swift有一个称为private的私有访问修饰符,这意味着只有其作用域内的事物才能使用它。 Objective-c没有隐私,而是隐藏的; 如果知道方法/变量的名称,则可以访问它。
假设我们有一些快速的代码,如下所示:
类静音:NSObject {
私人var名称=“ moe”
私人功能sayName()->字符串{
返回名称
}
}
因为没有公共访问权限,所以班上没有人可以访问它。
Mute()。name //不编译
您可以通过添加@objc来将Swift的真实隐私换成Objective-C的那种隐私
类静音:NSObject {
@objc私人var名称=“ moe”
@objc private func sayName()->字符串{
返回名称
}
}
//这样调用
m.value(forKey:“ name”)//“ moe”
m.value(forKey:“ sayName”)//“ moe”
m.perform(“ sayName”)。takeRetainedValue()//“ moe”
m.performSelector(onMainThread:“ sayName”,带有:nil,waitUntilDone:true)
在我的脑海中,您可以在目标操作模式(也就是任何选择器式API)中使用此策略。
var button = UIButton(frame:CGRect(x:0,y:0,width:100,height:100))
func initButton(){
self.addSubview(button)
button.addTarget(self,action:#selector(tappedButton),用于:.touchUpInside)
}
@objc私人功能tappedButton(){
打印(“做某事”)
}
对于单元测试应用程序私有部分也可能很有用。