【问题标题】:Extension func for a Swift Array taking any object as an argument将任何对象作为参数的 Swift 数组的扩展函数
【发布时间】:2016-01-03 04:47:55
【问题描述】:

我正在尝试在 Swift 中为 Array 实现一个简单的扩展函数,该函数将“切换”元素 - 如果值已经在 Array 中,则应将其删除,如果没有这样的值,则应将其添加到数组。

所以我认为它应该看起来像:

extension Array {

    mutating func toggle(value: Element) {
        if let index = indexOf(value) {
            removeAtIndex(index)
        } else {
            append(value)
        }
    }

}

此代码不会生成以下语句:“无法使用类型为 '(Element)'' 的参数列表调用 'indexOf' ”。我想,我们应该以某种方式告诉编译器“值”参数应该符合 Equatable 协议,但我该如何指定呢?

【问题讨论】:

    标签: arrays swift generics swift2


    【解决方案1】:

    您只需像这样使数组的通用“元素”符合“平等”:

    extension Array where Element: Equatable {
    
        mutating func toggle(value: Element) {
            if let index = indexOf(value) {
                removeAtIndex(index)
            } else {
                append(value)
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2016-05-24
      • 2011-06-28
      相关资源
      最近更新 更多