Arrays 如何[最佳]比较多类型[但仍受控制]数组中的值?
上下文:可以是Arrays 如何[最佳]比较多类型[但仍受控制]数组中的值?,arrays,swift,multidimensional-array,Arrays,Swift,Multidimensional Array,上下文:可以是[Int]或[String]的值数组(但重要的是没有其他值),也是可选的,需要与潜在的新值进行比较,以检查以前是否存在。以下是当前的解决方案: protocol ValueType {} extension Int: ValueType {} extension String: ValueType {} let values: [[ValueType]?] = [] // ... values.append(["a", "b", "c"]) values.append([1
[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
您将如何解决此问题?我将通过不使用协议来解决此问题。将ValueType设为并集,即具有两个大小写且具有关联值的枚举。在现代Swift中,联合是相等的,数组的数组是相等的,问题就解决了。我会通过不使用协议来解决它。将ValueType设为并集,即具有两个大小写且具有关联值的枚举。在现代Swift中,并集是相等的,数组的数组是相等的,问题就解决了。一个可能的替代方案:Thank@MartinR看起来很有用一个可能的替代方案:Thank@MartinR看起来很有用