斯威夫特如何穿越客观海(第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(){ 
打印(“做某事”)
}

对于单元测试应用程序私有部分也可能很有用。