Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何[最佳]比较多类型[但仍受控制]数组中的值?_Arrays_Swift_Multidimensional Array - Fatal编程技术网

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看起来很有用