2016-10-10 50 views
2

我正在從蘋果論壇寫一些代碼。一切似乎都正確,但我不斷收到兩個錯誤。有人請幫忙。代碼如下,然後是錯誤。協議擴展錯誤數組

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

+0

您的append方法定義略有不同。你需要添加一個下劃線:mutating func append(_ item:ItemType)。但其他的東西也是錯誤的...我沒有使用任何類型的數組 –

+0

我想它可能會在試圖查看'Any'是否可以等同時出現異常 –

回答

0

任何不equatable,所以你可以不使用任何陣列打電話checkToSeeIfItemsEqual。

我不確定你到底想要做什麼,但我想你可能會誤解equatable的工作原理。類型必須在表達式的兩邊都是已知的和相同的。例如Bool == Bool。如果你有一個數組,你無法知道數組元素的類型是什麼,所以無法比較它們。

如果要比較相同equatable類型的兩個數組,你可以這樣做:

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 
} 
+0

好吧,我更新了代碼,仍然得到了同樣的第一個錯誤,談論所需的追加。 –

+0

O nvm我想通了 –