在什么情况下,我应该在 swift 中使用 _ 作为参数
In what situation, should I use _ as a parameter in swift
我是 apple 的新手 Swift.I 我正在尝试基于此 tutorial 构建一个演示应用程序。我发现该应用程序无法正常工作。经过多次尝试和失败,我发现如果我更改代码行:
func textFieldDidEndEditing(textField: UITextField) {
到
func textFieldDidEndEditing(_ textField: UITextField) {
我能够 运行 正确地编写代码。
我想知道添加 _ 作为参数之一会发生什么。这两种方法都不会导致编译错误。但是第一个确实给出了这样的警告:
ViewController.swift:35:10: Instance method 'textFieldDidEndEditing(textField:)'
nearly matches optional requirement 'textFieldDidEndEditing' of protocol 'UITextFieldDelegate'
由于第一个是apple tutorial给的,不知道是不是写错了。有人可以澄清我的疑问吗?
我认为您使用的是 Swift 3.0。您正在学习的教程可能是 Swift 2.2 或 Swift 2.3 版本。这只不过是我所观察到的语法变化。即使我昨天更新到 Xcode 8.0
也遇到了这种情况
如果你想要多个没有外部名称的参数,你必须使用“_”下划线字符作为其外部名称:
来自Swift 3 第一个参数标签也是初始化程序的标准。
Swift3进化
First parameter declarations will match the existing behavior of the second and later parameters. All parameters, regardless of position, will behave uniformly. This will create a simple, consistent approach to parameter declaration throughout the Swift programming language and bring method and function declarations in-sync with initializers, which already use this standard.
例如
func foo(x: Int, y: Int)
将声明 foo(x:y:)
而不是 foo(_:,y:)
。
现有的外部标签覆盖将继续应用于第一个参数。您在其支持的本地参数名称之前建立外部参数名称,并以 space 分隔。例如,
func foo(xx x: Int, yy y: Int) //declares foo(xx:yy:) and
func foo(_ x: Int, y: Int) //explicitly declares foo(_:y:)
阅读 SE-0046
中有关第一个参数的更多信息
我是 apple 的新手 Swift.I 我正在尝试基于此 tutorial 构建一个演示应用程序。我发现该应用程序无法正常工作。经过多次尝试和失败,我发现如果我更改代码行:
func textFieldDidEndEditing(textField: UITextField) {
到
func textFieldDidEndEditing(_ textField: UITextField) {
我能够 运行 正确地编写代码。
我想知道添加 _ 作为参数之一会发生什么。这两种方法都不会导致编译错误。但是第一个确实给出了这样的警告:
ViewController.swift:35:10: Instance method 'textFieldDidEndEditing(textField:)'
nearly matches optional requirement 'textFieldDidEndEditing' of protocol 'UITextFieldDelegate'
由于第一个是apple tutorial给的,不知道是不是写错了。有人可以澄清我的疑问吗?
我认为您使用的是 Swift 3.0。您正在学习的教程可能是 Swift 2.2 或 Swift 2.3 版本。这只不过是我所观察到的语法变化。即使我昨天更新到 Xcode 8.0
也遇到了这种情况如果你想要多个没有外部名称的参数,你必须使用“_”下划线字符作为其外部名称:
来自Swift 3 第一个参数标签也是初始化程序的标准。
Swift3进化
First parameter declarations will match the existing behavior of the second and later parameters. All parameters, regardless of position, will behave uniformly. This will create a simple, consistent approach to parameter declaration throughout the Swift programming language and bring method and function declarations in-sync with initializers, which already use this standard.
例如
func foo(x: Int, y: Int)
将声明 foo(x:y:)
而不是 foo(_:,y:)
。
现有的外部标签覆盖将继续应用于第一个参数。您在其支持的本地参数名称之前建立外部参数名称,并以 space 分隔。例如,
func foo(xx x: Int, yy y: Int) //declares foo(xx:yy:) and
func foo(_ x: Int, y: Int) //explicitly declares foo(_:y:)
阅读 SE-0046
中有关第一个参数的更多信息