![](/img/trans.png)
[英]Swift: Declare in an extension that an array of a type conforms to a protocol
[英]Protocol Extension Error Array
我在Apple论坛上编写一些代码。 一切似乎都正确,但我不断遇到两个错误。 有人请帮忙。 下面是代码,后面是错误。
protocol Container{
associatedtype ItemType
mutating func append(item: ItemType)
var count:Int{get}
subscript(i:Int)->ItemType{get}
}
extension Array: Container {}
func checkToSeeIfItemsEqual<C1:Container, C2:Container>(container1:C1, container2:C2) -> Bool where C1.ItemType == C2.ItemType, C1.ItemType:Equatable{
if container1.count != container2.count{
return false
}
for i in 0..<container1.count{
if container1[i] != container2[i]{
return false
}
}
return true
}
var damnArray = [1, 2, 4]
var damnArray2 = [1, 2, 4]
let theBool = checkToSeeIfItemsEqual(container1: damnArray, container2: damnArray2)
print(theBool)
Any不等于,因此您无法使用Any数组调用checkToSeeIfItemsEqual。
我不确定您到底想做什么,但我认为您可能会误解平等的工作原理。 类型必须在表达式的两面都已知且相同。 例如Bool == Bool
。 如果您有一个数组,则无法知道数组的Element是什么类型,因此无法进行比较。
如果要比较相同的相等类型的两个数组,可以执行以下操作:
func arraysAreEqual<ElementType: Equatable>(firstArray: [ElementType], secondArray: [ElementType]) -> Bool {
guard firstArray.count == secondArray.count else {
return false
}
for i in 0..<firstArray.count{
if firstArray[i] != secondArray[i]{
return false
}
}
return true
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.