Как [лучше] сравнить значения в множественном типе [но тем не менее контролируемом] массиве? - PullRequest
0 голосов
/ 16 октября 2019

Контекст: массив значений, которые могут быть либо [Int], либо [String] - но, что важно, ничем иным - и также являются необязательными, их необходимо сравнивать с потенциальными новыми значениями, чтобы проверить их предыдущее существование. Вот текущее решение:

protocol ValueType {}

extension Int: ValueType {}
extension String: ValueType {}

let values: [[ValueType]?] = []

// ...

values.append(["a", "b", "c"])
values.append([1, 2, 3, 4, 5])

Это прекрасно работает, пока не получит значения из массива для сравнения, таким образом:

func compare(_ newValues: [ValueType]?, at index: Int) {
    let existingValues = values[i]
    let areTheSame = existingValues == newValues
}

В какой момент, конечно:

Protocol type 'ValueType' cannot conform to 'Equatable' because only concrete types can conform to protocols

Как бы вы решили это?

1 Ответ

2 голосов
/ 16 октября 2019

Я бы разрешил это, не используя протокол. Сделайте ValueType объединением, то есть перечислением с двумя падежами со связанными значениями. В современном Swift союзы равноправны, массивы массивов равны, проблема решена.

...