2017-01-14 3 views
0

これが問題の拡張である:creating-a-function-on-a-parent-class-that-can-be-accessible-to-all-its-children「プロトコルタイプ 『』インスタンス化することはできません」というエラー

これは、プロトコルが良いだろう機能のためのクラスを使用する代わりに示唆されました。プロトコルのアプローチを試みた後、エラー "プロトコルタイプ 'JSONObject'をインスタンス化できません"というエラーが発生します。このエラーを解決するための助けに感謝します。このような

protocol JSONObject: class, NSObjectProtocol { 

    init(resultsDictionary: [String:Any]) 

} 

extension JSONObject { 

    static func updateResultsDictionary(urlExtension: String, completion: 
    @escaping (JSONObject?) -> Void) { 

    let nm = NetworkManager.sharedManager 

    _ = nm.getJSONData(urlExtension: urlExtension) {data in 

     guard let jsonDictionary = nm.parseJSONFromData(data), 
     let resultDictionaries = jsonDictionary["result"] as? [[String : Any]] else { 

      completion(nil) 

      return 
     } 

     for resultsDictionary in resultDictionaries { 

     let jsonInfo = JSONObject(resultsDictionary: resultsDictionary)// Error haapens here 

     completion(jsonInfo) 

     } 

    } 

    } 

} 

答えて

0

使用Self:ここでのプロトコルです

static func updateResultsDictionary(urlExtension: String, completion: 
    @escaping (Self?) -> Void) { 


    let jsonInfo = self.init(resultsDictionary: [:]) 

    completion(jsonInfo) 

} 

あなたには、いくつかのを初期化することができないためには、しかし、あなたはに準拠Typeを初期化することができます。

Selfは、ではなく、Typeを意味します。

次に、ネットワークアーキテクチャの設計に役立つProtocol-Oriented Programming in Networkingのチュートリアルです。

関連する問題