“协议类型''无法实例化”错误

时间:2017-01-14 02:03:23

标签: ios swift protocols

这是问题的扩展: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)

      }

    }

  }

}

1 个答案:

答案 0 :(得分:1)

像这样使用Self

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


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

    completion(jsonInfo)

}

因为您无法初始化某些protocol,但您可以初始化Type符合protocol

Self表示Type而不是protocol

这是一个关于Protocol-Oriented Programming in Networking的教程,它将帮助您设计网络架构。