我正在尝试为特定类型的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
一样。
看起来好像未指定数组元素的类型,我无法弄清楚原因。
答案 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
*/