协议扩展错误数组

时间:2016-10-10 04:04:49

标签: arrays swift inheritance

我正在撰写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)

enter image description here

1 个答案:

答案 0 :(得分:0)

任何不相等,所以你不能使用任何数组调用checkToSeeIfItemsEqual。

我不确定你到底想要做什么,但我认为你可能误解了等同起作用。这些类型必须是已知的,并且在表达式的两侧都是相同的。例如Bool == Bool。如果你有一个数组,你无法知道数组元素的类型是什么,因此无法比较它们。

如果要比较两个相同等同类型的数组,可以这样做:

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
}