在什么情况下,我应该在swift中使用u作为参数

在什么情况下,我应该在swift中使用u作为参数,swift,uitextfield,swift3,uitextfielddelegate,Swift,Uitextfield,Swift3,Uitextfielddelegate,我是新来的苹果雨燕。我正试图建立一个演示应用程序基于此。我发现该应用程序不工作。经过几次尝试并失败后,我发现如果我更改代码行: func textFieldDidEndEditing(textField: UITextField) { 到 我能够正确运行代码 我想知道添加u作为参数之一会发生什么。这两种方法都不会导致编译错误。但第一条确实给出了如下警告: ViewController.swift:35:10: Instance method 'textFieldDidEndEditing(te

我是新来的苹果雨燕。我正试图建立一个演示应用程序基于此。我发现该应用程序不工作。经过几次尝试并失败后,我发现如果我更改代码行:

func textFieldDidEndEditing(textField: UITextField) {

我能够正确运行代码

我想知道添加u作为参数之一会发生什么。这两种方法都不会导致编译错误。但第一条确实给出了如下警告:

ViewController.swift:35:10: Instance method 'textFieldDidEndEditing(textField:)' 
nearly matches optional requirement 'textFieldDidEndEditing' of protocol 'UITextFieldDelegate'

由于第一个是由苹果教程给出的,我不确定这是否是一个错误。有人能澄清我的疑问吗?

我想你正在使用Swift 3.0。您正在学习的教程可能是Swift 2.2或Swift 2.3版本。这只是我所观察到的语法变化。即使我昨天更新到Xcode 8.0时也遇到了这种情况。如果您想要多个没有外部名称的参数,则必须使用“u”下划线字符作为其外部名称:

来自Swift 3的第一个参数标签也是初始化器的标准

Swift 3演进

第一个参数声明将与第二个和以后的参数的现有行为相匹配。所有参数,无论其位置如何,都将保持一致。这将在整个Swift编程语言中创建一种简单、一致的参数声明方法,并使方法和函数声明与已使用此标准的初始值设定项同步

比如说

func foo(x: Int, y: Int) 
将声明
foo(x:y:)
而不是
foo(:,y:)

现有的外部标签替代将继续应用于第一个参数。您可以在外部参数名称之前建立其支持的本地参数名称,并用空格分隔。比如说,

func foo(xx x: Int, yy y: Int) //declares foo(xx:yy:) and

func foo(_ x: Int, y: Int) //explicitly declares foo(_:y:)

阅读更多关于

中第一个参数的信息,我使用的是最新版本的Xcode,您可以在此处找到正确答案:
func foo(xx x: Int, yy y: Int) //declares foo(xx:yy:) and

func foo(_ x: Int, y: Int) //explicitly declares foo(_:y:)