Я пытаюсь проверить, содержит ли массив кортежей определенный набор, используя собственный метод Array
. я объявил две мои «equatable» функции, какНевозможно создать правильную Equable функцию для использования с Array's .contains()
public func ==(a: (clip1: Clip?, clip2: Clip?), b: (clip1: Clip?, clip2: Clip?)) -> Bool {
let clipa1 = a.clip1
let clipa2 = a.clip2
let clipb1 = b.clip1
let clipb2 = b.clip2
if clipa1 != nil && clipa2 != nil && clipb1 != nil && clipb2 != nil {
return (clipa1! == clipb1!) && (clipa2! == clipb2!)
}
else if clipa1 != nil && clipa2 == nil && clipb1 != nil && clipb2 == nil {
return (clipa1! == clipb1!)
} else {
return false
}
}
public func ==(a: Clip, b: Clip) -> Bool {
return a.id == b.id
}
Однако, когда я пытаюсь это таким образом
for clip in tmp {
if !_filteredClips?.contains((clip1: clip.clip1, clip2: clip.clip2)) {
_filteredClips?.append(clip)
}
}
я получаю Cannot convert value of type '(clip1: Optional<Clip>, clip2: Optional<Clip>)' to expected argument type '@noescape ((clip1: Clip?, clip2: Clip?)) throws -> Bool'
Что я здесь отсутствует?
Извините, я не уверен, что понимаю, где я должен 'isEqual'. Позаботьтесь о том, чтобы уточнить немного больше, пожалуйста? – Thanos
отредактировал ответ –
Прошу прощения, это пока неясно. Не могли бы вы уточнить, как изменить код, который я вставил, чтобы избежать ошибки времени компиляции, которую я получаю? – Thanos