2017-01-14 2 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, который поможет вам создать сетевую архитектуру.

Смежные вопросы