带选项

时间:2015-11-18 21:53:01

标签: arrays swift optional swift-extensions

我为Array创建了一个简单的扩展,它只会追加唯一的元素。它工作正常,直到我想使用一组可选项。因为我不断收到错误 Type 'Event?' does not conform to protocol 'Equatable'

活动类

import RealmSwift
class Event: Object,Equatable {
    dynamic var id = ""
}

func ==(lhs: Event, rhs: Event) -> Bool {
    return lhs.id == rhs.id
}

扩展

extension Array where Element : Equatable {
    mutating func appendUniqueContentOf(elements:[Element]){
        for ele in elements {
            if (!contains(ele)){
                append(ele)
            }
        }
    }
}

用法

var newEvents:[Event] = someEvents()
var events = [Event?]()
events.appendUniqueContentOf(newEvents)

问题 我不明白这种情况。 Event类符合该协议。我还尝试添加==功能的其他组合,但没有成功。

我不知道如何回答这个问题。这是我延期的问题吗?我应该如何正确接近它?你能告诉我正确的轨道吗?

1 个答案:

答案 0 :(得分:1)

Event?Optional<Event>的语法糖。由于Optional不符合EquatableOptional<Event>也不会。

虽然可能,但我强烈反对Equatable实施Optional。话虽如此,您可能应该重新考虑并尝试仅使用Array<Event>