swift - 关于 Swift 选择器的 4 个问题

标签 swift

抱歉这些问题

我有 4 个关于 swift 中的选择器的问题。

第一个问题

我想知道在 swift 中使用选择器的正确方法是什么

closeBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Stop, target: self, action: Selector("closeBarButtonItemClicked:"));

对比

closeBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Stop, target: self, action: "closeBarButtonItemClicked:");

我们应该立即使用 Selector("methodName:") 还是 "methodName:"?

两种方法都有效,但哪一种方法正确?

第二个问题

我们如何在 Swift 中调用带参数的函数?假设我想调用这样的函数

func methodName(parameterOne : String, parameterTwo: String)

第三个问题

我们如何在 swift 中使用 Selector 调用类型方法?有可能吗?

class SomeClass {
class func someTypeMethod() {
// type method implementation goes here
  }
}

第四个问题

Selector 中函数名后面那个冒号的作用是什么?

最佳答案

@ad121 的回答很好——只是想为 #1 添加一点上下文:

Selector 类型已在 Swift 中扩展为 StringLiteralConvertible。任何时候需要 Selector 实例时,您都可以提供一个字符串文字,然后将为您创建一个 Selector 实例。这意味着您还可以从字符串文字手动创建一个 Selector 实例:

let mySelector: Selector = "methodName:withParameter:"

请注意,这并不意味着 String 可以与 Selector 互换使用——这仅适用于字符串文字。以下将失败:

let methodName = "methodName:withParameter:"
let mySelector: Selector = methodName
// error: 'String' is not convertible to 'Selector'

那种情况下,您需要自己实际调用Selector 构造函数:

let methodName = "methodName:withParameter:"
let mySelector = Selector(methodName)

关于swift - 关于 Swift 选择器的 4 个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184350/

相关文章:

ios - 在 collectionView 的 indexPath.row 获取 UILabel.text

swift - 无法从 mapview 中获取自定义模型确实更改了状态函数

ios - 在 prepareForSegue() 中崩溃

swift - 如何通过代码访问 Storyboard 的 segue?

ios - 如何向 UICollectionView 添加适当的填充?

swift - UICollectionView 在从 Web Api 加载数据之前运行

ios - 显示键盘时保持 UITableView 中聚焦的 UITextView 的可见性

ios - UITableViewCell 列宽变化基于屏幕方向 IOS Swift

swift - 如何快速访问 argv 和 argc?

swift - Viewcontroller 不符合 NSObject 协议(protocol)