函数声明中的下划线有什么作用?

时间:2017-06-10 20:53:51

标签: swift

在下面的示例代码中,如果删除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.
  }
}

1 个答案:

答案 0 :(得分:5)

下划线表示调用函数时应省略参数名称。

所以这个功能:

func webViewDidFinishLoad(_ playerWebView: UIWebView) { /* ... */ }

应该被称为:

webViewDidFinishLoad(aWebView)

和这一个:

func webViewDidFinishLoad(playerWebView: UIWebView) { /* ... */ }

为:

webViewDidFinishLoad(playerWebView: aWebView)

在Swift中,这些被视为两个不同的函数,这就是为什么在更改签名时看不到被调用函数的原因。

可在此处的“功能参数标签和参数名称”下找到更多信息:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID166