2016-10-10 20 views
2

私はAppleフォーラムからいくつかのコードを書いていました。すべてが正しいように見えますが、私は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

あなたのメソッドの定義は少し異なります。アンダースコアを追加する必要があります:mutating func append(_ item:ItemType)。しかし、何か他のものも間違っています...あなたの配列にどんなタイプも使用しないようにしました。 –

+0

「Any」が同等かどうかを調べるときに驚くかもしれないと思います。 –

答えて

0

いずれかがequatableではありませんので、あなたは、任意の配列を使用してcheckToSeeIfItemsEqualを呼び出すことはできません。

私は正確に何をしようとしているのかよくわかりませんが、私はあなたがどのように同等の作品が誤解されていると思いますか?型は、式の両側で既知で同一でなければなりません。例えばBool == Bool。配列を持っている場合は、配列のElementの型が何であるかを知る方法がないので、それらを比較することはできません。

あなたが同じequatableタイプの2つの配列を比較したい場合は、あなたがこれを行うことができます:APPENDため

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

OKコードを更新しましたが、必要な追加について話す最初のエラーと同じです。 –

+0

O nvm私はそれを理解した –

関連する問題