iOS Swift 委托语法

iOS Swift Delegate Syntax

我是 iOS 和 Swift 的新手。我在理解委托中使用的协议方法中使用的语法时遇到问题。举个例子,在UIPickerView中使用了下面两个方法:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return count
}

第一种方法很好,但第二种方法的语法让我感到困惑。第二个参数的格式莫名其妙,按我的理解应该是一个Int,叫"component",为什么动作名"numberOfRowsInComponent"在前面呢?

还有为什么委托方法都叫"pickerView",难道都是重载吗?

如有任何指导,我们将不胜感激。

完整的方法名称是 pickerView:numberOfRowsInComponentcomponent 是实际包含传递值的参数名称

了解 External Parameter Names

Sometimes it’s useful to name each parameter when you call a function, to indicate the purpose of each argument you pass to the function.

If you want users of your function to provide parameter names when they call your function, define an external parameter name for each parameter, in addition to the local parameter name. You write an external parameter name before the local parameter name it supports, separated by a space:

func someFunction(externalParameterName localParameterName: Int) {
    // function body goes here, and can use localParameterName
    // to refer to the argument value for that parameter
}

numberOfRowsInComponent component第一个是外名,第二个是内名。 numberOfRowsInComponent 在调用方法时使用,但在方法实现中使用 component

Also why are the delegate methods all called "pickerView", are they all just overloads?

它们不完全是重载,因为它们具有不同的签名名称。例如

pickerView:numberOfRowsInComponent:
pickerView:widthForComponent:
// etc

只有方法签名匹配,但参数数量或类型不同,才是方法重载。