繁体   English   中英

协议扩展错误数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM