Контекст: массив значений, которые могут быть либо [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
Как бы вы решили это?