在下面的示例代码中,如果删除webViewDidFinishLoad
声明中的下划线,则不会触发。下划线做什么?
import UIKit
class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var playerWebView: UIWebView!
let youtubeUrl = URL(string: "https://youtube.com")
override func viewDidLoad() {
super.viewDidLoad()
playerWebView.delegate = self
let request = URLRequest(url: youtubeUrl!)
playerWebView.loadRequest(request)
print("viewDidLoad")
}
func webViewDidFinishLoad(_ playerWebView: UIWebView) {
print("webviewFinishedLoad")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:5)
下划线表示调用函数时应省略参数名称。
所以这个功能:
func webViewDidFinishLoad(_ playerWebView: UIWebView) { /* ... */ }
应该被称为:
webViewDidFinishLoad(aWebView)
和这一个:
func webViewDidFinishLoad(playerWebView: UIWebView) { /* ... */ }
为:
webViewDidFinishLoad(playerWebView: aWebView)
在Swift中,这些被视为两个不同的函数,这就是为什么在更改签名时看不到被调用函数的原因。
可在此处的“功能参数标签和参数名称”下找到更多信息: