Swift Playground具有此功能:
func repeatItem<Item>(item: Item, numberOfTimes: Int) -> [Item] {
var result = [Item]()
for _ in 0..<numberOfTimes {
result.append(item)
}
return result
}
let strArray: [String] = repeatItem("knock", numberOfTimes:4) //!!!!
为什么函数调用中有numberOfTimes:
,为什么删除它会给我错误&#34;缺少参数标签&#34;?更令人困惑的是,为什么要在&#34; knock&#34;中添加一个参数标签。给我&#34;无关的参数标签&#34;?
编辑:
这段代码在调用中也没有参数标签:
func anyCommonElements <T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
anyCommonElements([1, 2, 3], [3])
答案 0 :(得分:1)
func repeatItem<Item>(item: Item, numberOfTimes: Int) -> [Item]
是一个采用两个参数的方法,第一个是item
,第二个是numberOfTimes
。
在Swift中,当你调用一个方法或一个函数时,你必须写下参数的名称,后跟&#34;:&#34;及其价值。
在Swift中,可以省略第一个参数的名称。
答案 1 :(得分:1)
问题1
这是通过构建Swift。来自Swift language guide for functions - Function Parameter Names:
默认情况下,第一个参数省略其外部名称,表示 第二个和后续参数使用其本地名称作为他们的 外部名称。所有参数必须具有唯一的本地名称。虽然 多个参数可以具有相同的外部名称, 独特的外部名称有助于提高代码的可读性。
...
如果您不想使用第二个或外部名称 函数的后续参数,改为写下划线(_) 该参数的显式外部名称。
请注意,您可以通过在第二个(及以后)参数名称前放置一个下划线_
来取代此要求。在你的情况下:
func repeatItem<Item>(item: Item, _ numberOfTimes: Int) -> [Item] { ...
最后请注意,这与泛型无关,但通常与Swift函数无关。
问题2
尝试更换行
let strArray: [String] = repeatItem("knock", numberOfTimes:4) //!!!!
与
let strArray = [String](count: 4, repeatedValue: "knock")
这使用带有重复条目的数组对象的初始化。