我看过这样的代码:
func hello(name: String, #helloMessage: String) -> String {
return "\(helloMessage), \(name)."
}
我的问题是#
参数名称前的标记是什么意思?这是否意味着在调用函数时必须指定参数?
此外,没有这个#
标记,有人能告诉我功能的不同吗?代码示例非常受欢迎。
更新(Swift 3。* …)
第一个参数签名的默认行为发生了巨大变化。要了解参数标签(例如“外部参数”)和参数名称(例如“局部参数”)如何工作,请阅读Apple的Swift书中的“函数参数标签和参数名称”一章。
一些例子:
func someFunction(parameterName: Int) { parameterName }
someFunction(parameterName: 5) // argument label not specified
func someFunction(argumentLabel parameterName: Int) { parameterName }
someFunction(argumentLabel: 5) // argument label specified
func someFunction(_ parameterName: Int) { parameterName }
someFunction(5) // argument label omitted
方法和函数之间的行为没有区别。
更新(Swift 2. *)
不推荐使用下面描述的功能,需要两次写入参数名称才能获得与之前的哈希符号相同的行为。
更新(示例)
对于函数:调用函数且不清楚某些参数的用途时,请为这些参数提供外部名称。
func someFunction(parameterName: Int) { parameterName }
someFunction(5) // What is the meaning of "5"?
func someFunction(externalParameterName parameterName: Int) { parameterName }
someFunction(externalParameterName: 5) // Now it's clear.
但是,如果外部名称和本地名称相同,则只需在参数名称之前写一个井号。
func someFunction(#parameterName: Int) { parameterName }
// It's actually like:
// func someFunction(parameterName parameterName: Int) { parameterName }
someFunction(parameterName: 5)
对于方法:默认情况下,第一个参数名称仅是本地的(如函数所定义),而第二个及后续参数名称既是本地的,又是外部的(例如,当您在参数名称之前编写哈希符号时,此#隐含在该位置):
class SomeClass {
func someMethodWith(firstParameter: Int, andSecondParameter: Int) { ... }
}
SomeClass().someMethodWith(5, andSecondParameter: 10)
您也可以对方法的第一个参数使用#(或添加一个显式的外部名称),但它与Objective-C样式的调用不匹配。
class SomeClass {
func someMethodWith(#firstParameter: Int, andSecondParameter: Int) { ... }
}
SomeClass().someMethodWith(firstParameter: 5, andSecondParameter: 10)
原始答案
如果要为函数参数提供外部参数名称,并且本地参数名称已经是要使用的适当名称,则无需为该参数重复输入相同的名称。相反,只需写一次名称,并在名称前面加上井号(#)。这告诉Swift将名称用作本地参数名称和外部参数名称。
摘录自:苹果公司“ The Swift Programming
Language”。iBooks。https://itunes.apple.com/ru/book/swift-programming-
language/id881256329?l=zh-TW&mt=11
问题内容: 例如,我有两个名为和的文件。 : : 我读到公共类不能在模块外部子类化。在这里,我有C类。我试图了解模块在这里的含义。我为两个文件导入了相同的模块UIKit。那么,这两个文件属于同一模块吗?这样我就可以继承。还是两个文件都具有不同的模块,甚至我导入相同的UIKit? 谁能解释什么是模块? 资源: 具有公共访问权限或更高访问权限级别的类只能在定义它们的模块内被子类化。 具有公共访问权限或
问题内容: 我正在寻找有关Google Go语言的信息。在“ A Go of Go”中,他们具有以下代码: 但是什么和 意味着什么呢? 您可以在http://tour.golang.org/#14上查看所有代码 问题答案: 它们是按位移位运算符。表示 x ×2 y ,而表示 x ×2 -y 或等效地x÷2 y。这些运算符通常用于操作值的二进制表示形式,就像十进制的10的幂一样,乘或除以2的幂分别具
问题内容: 我对&符号的了解只是一点点的了解,但有时我会在变量名的前面看到它。将a 放在变量前面有什么作用? 问题答案: 用作使变量成为输入输出参数。实际上,输入输出表示通过参考传递值,而不是通过值传递值。而且,它不仅需要通过引用接受值,还需要通过引用传递值,所以用&传递值,而不是 如您所见,您可以在Swift的错误处理中使用它,您必须创建一个错误引用并将其传递给使用该函数的函数,如果发生错误,该
我在jQuery中看到了这一点——它做了什么?
问题内容: 我在github上找到了一些用Swift编写的代码, 并对这条线有些困惑 您能解释一下这条线的真正含义吗?非常感谢你! 问题答案: 意思是不要给那东西起名字。它可以在许多地方使用。就您而言,这就是说忽略传递给闭包的变量。您提供的代码将忽略所有参数,但您也可以忽略某些参数。 是执行关闭的开始。在您的示例代码中,闭包的实现为空。 总体而言,该行定义了一个名为“ done”的闭包,该闭包接受
问题内容: 我在样式表中看到以下CSS声明: 该部分到底是什么意思? 问题答案: 是字体大小,是行高。 该语法基于用于指定各个大小的印刷符号,并且仅适用于速记属性。换句话说,以上声明只是扩展为以下内容: 与往常一样,如果将行高设置为相对值(例如,百分比或ems),则会相对于字体大小进行计算。 W3C CSS2.1 属性参考W3C CSS3字体模块属性参考(http://www.w3.org/TR/