【问题标题】:Swift, generic function: Why is one argument label needed, the other is not?Swift,通用函数:为什么需要一个参数标签,而另一个不需要?
【发布时间】:2016-03-31 16:09:55
【问题描述】:

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:,为什么删除它会给我“缺少参数标签”的错误?更令人困惑的是,为什么在“敲门”中添加参数标签会给我“无关参数标签”?

编辑:

此外,这段代码在调用中没有参数标签:

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])

【问题讨论】:

    标签: swift generics parameter-passing


    【解决方案1】:

    func repeatItem&lt;Item&gt;(item: Item, numberOfTimes: Int) -&gt; [Item] 是一个接受两个参数的方法,第一个是item,第二个是numberOfTimes。 在 Swift 中,当你调用一个方法或一个函数时,你必须写下参数的名称,后跟“:”和它的值。

    在 Swift 中,第一个参数的名称可以省略。

    【讨论】:

    • 谢谢,我认为这是通用的,因为我见过很多没有这些标签的函数调用。
    【解决方案2】:

    问题 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")
    

    这将初始化器用于具有重复条目的数组对象。

    【讨论】:

      猜你喜欢
      • 2012-11-08
      • 2019-03-11
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多