2016-10-21 6 views
9

xcodeを使用してコードベースをswift 3.0に移行しようとしています。私が理解できない問題はほとんどありません。Swift 3.0の移行エラー: 'IndexPath'以外のプロトコルタイプに制約された 'Element'タイプ

問題:エラーナビゲーションパネルの左側にType 'Element' constrained to non-protocol type 'IndexPath'

enter image description here

は、それだけでエラー以下に示します。エラーの原因となるコード行やコードの枝がわからない。

enter image description here

誰も私がこれをしてください解決するために助けることができます。

UPDATE

私はこれらの問題に悩まされています。

enter image description here

UPDATE

あなたの助けありがとうございました。今私は次の問題に直面しました。あなたのほとんど

enter image description here

ソースコードを投稿することが求めているが、Xcodeは、ページ上の警告やエラーのいずれかの種類を示しませんでした。いくつかのジェネリックIndexPathはプロトコルではないので、それはジェネリックですので、あなただけの拡張を制約するプロトコルを使用することができますので、extension Array where Element: IndexPath {は動作しません迅速な3では

private extension Array where Element: IndexPath { 

    func indexOf(_ indexPath: IndexPath) -> Int { 
     var counter = 0 
     for object in self { 
      if object.section == indexPath.section && object.row == indexPath.row { 
       return counter 
      } 
      counter += 1 
     } 
     return 0 
    } 
} 


fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool { 
    switch (lhs, rhs) { 
    case let (l?, r?): 
    return l < r 
    case (nil, _?): 
    return true 
    default: 
    return false 
    } 
} 
+2

シェアエラーや警告上映がないいるファイルでは、この問題 – Wolverine

+0

に直面しているコードの行:プロトコル、のようなものを作成することによってこの問題を回避シャッフルすることができます。 –

+0

@ウォルバイン最新の質問をご覧ください。 –

答えて

40

があります。

迅速3.1ではこれが変更された(hereを参照)ので、あなたは少し異なる構文を使用して特定のタイプを使用することができます:あなたはまだ、その後迅速3.1にあなたを移動することができない場合

extension Array where Element == IndexPath { 

protocol Indexable { 
    var row: Int { get } 
    var section: Int { get } 
} 

extension IndexPath: Indexable {} 

extension Array where Element: Indexable { 
    ... 
+0

おかげで..あなたは私を救った....:) –

+0

まだSwift 3.1にアップデートすることは可能ですか? –

+0

自分の質問に答える(はい!):https://www.hackingwithswift.com/example-code/language/how-to-install-a-beta-version-of-swift –

関連する問題