特定类型的数组扩展返回错误

时间:2015-09-26 17:10:29

标签: arrays swift2

我正在尝试为特定类型的Element创建数组扩展。 这是我写的:

(UnElement是符合CustomStringConvertible,Equatable,Comparable协议的类)

extension Array where Element : UnElement {
    mutating func ajoute(new: UnElement) -> Bool {
        if new.pKey == nil {
            return false
        } else {
            if self.contains(new) {
                return false
            } else {
                self.append(new)
                return true
            }
        }
    }
}

但我收到了contains方法的错误:

  

无法调用'包含'使用类型(UnElement)

的参数列表

当然和append一样。

看起来好像未指定数组元素的类型,我无法弄清楚原因。

2 个答案:

答案 0 :(得分:0)

您需要将new投射到数组的Element类型:

extension Array where Element : UnElement {
    mutating func ajoute(new: UnElement) -> Bool {
        if new.pKey == nil {
            return false
        } else {
            if self.contains(new as! Element) {
                return false
            } else {
                self.append(new as! Element)
                return true
            }
        }
    }
}

答案 1 :(得分:0)

你不需要施放任何东西......

class UnElement: Equatable {
    var pKey: Int?
    init(key: Int?) {
        pKey = key
    }
}
func ==(lhs: UnElement, rhs: UnElement)->Bool {
    return lhs.pKey == rhs.pKey
}

extension Array where Element : UnElement {
    mutating func ajoute(new: Element) -> Bool {
        if new.pKey == nil {
            return false
        } else {
            if self.contains(new) {
                return false
            } else {
                self.append(new)
                return true
            }
        }
    }
}

var arr = [UnElement(key: 1), UnElement(key: 2), UnElement(key: nil)]
arr.ajoute(UnElement(key: 1)) // false
arr.ajoute(UnElement(key: 3)) // true
dump(arr)
/*
▿ 4 elements
▿ [0]: UnElement #0
▿ pKey: 1
- Some: 1
▿ [1]: UnElement #1
▿ pKey: 2
- Some: 2
▿ [2]: UnElement #2
- pKey: nil
▿ [3]: UnElement #3
▿ pKey: 3
- Some: 3
*/