我有继续在我的视图控制器中实现的协议。
protocol GuessDelegate {
func userDidFinish(_controller:GuessInputViewController, guess:String)
}
但是,当我调用它时,编译器强迫我在_controller:
之前键入self
(请参见下文)。它不允许我写delegate.userDidFinish(self, guess: guessText)
并抱怨如果我尝试这样做会丢失参数标签。
但是,方法签名没有参数标签,只是带有前划线的参数名称controller
,我认为这意味着不需要在函数调用中键入参数名称。
到底发生了什么?可能是因为它是一种协议方法,所以可能会这样吗?
@IBAction func saveGuess(_ sender: AnyObject) {
if let delegate = delegate, let guessText = guessTextField.text {
delegate.userDidFinish(_controller: self, guess: guessText)
}
}
在下划线和控制器之间放置一个空格
protocol GuessDelegate {
func userDidFinish(_ controller:GuessInputViewController, guess:String)
}
一旦在下划线后添加空格,它将起作用。
protocol GuessDelegate {
func userDidFinish(_ controller:GuessInputViewController, guess:String)
}