2017-08-03 1 views
0

Ich verwende Xcode 8.3.3. Ich bekomme einen Swift Compilerfehler "Undeutliche Referenz zum Mitglied". Ich bin über den Code gegangen und kann es nicht herausfinden.Warum erhalte ich diesen Fehler: Mehrdeutiger Verweis auf Member 'holen (mit: parse: completion :)'

protocol APIClient { 
var session: URLSession { get } 
func fetch<T: JSONDecodable>(with request: URLRequest, parse: @escaping (JSON) -> T?, completion: @escaping (Result<T, APIError>) -> Void) 

    func fetch<T: JSONDecodable>(with request: URLRequest, parse: @escaping (JSON) -> [T], completion: @escaping (Result<[T], APIError>) -> Void) 
} 
fetch(with: request, parse: { json -> [YelpBusiness] in 
      guard let businesses = json["businesses"] as? [[String: Any]] else { return [] } 
      return businesses.flatMap { YelpBusiness(json: $0) } 
}, completion: completion) 

https://github.com/jripke74/RestaurantReviews.git

Antwort

0

checkte ich Ihren Code. Sie haben eine erstellt, die die Klasse YelpClient bestätigt. Was ist los mit dir?

fetch(with: request, parse: { json -> [YelpBusiness] in 
      guard let businesses = json["businesses"] as? [[String: Any]] else { return [] } 
      return businesses.flatMap { YelpBusiness(json: $0) } 
}, completion: completion) 

obigen Code verwenden Sie direkt sind die ohne delegate aufrufen. Das Problem ist, dass Sie die in der YelpClient Klasse wie folgt erben müssen.

func fetch<T>(with request: URLRequest, parse: @escaping (APIClient.JSON) -> T?, completion: @escaping (Result<T, APIError>) -> Void) where T : JSONDecodable { 
    //Code 
} 

func fetch<T>(with request: URLRequest, parse: @escaping (APIClient.JSON) -> [T], completion: @escaping (Result<[T], APIError>) -> Void) where T : JSONDecodable { 
    //Code 
} 

Weitere Informationen finden Sie im Apfel documentation

Updated:

den Screenshot unten prüfen bessere Idee

enter image description here

+0

ich den Code glauben korrekt ist, aber wenn Sie führen Sie den Code (I GitHub-Link enthalten). Sie erhalten einen mehrdeutigen Verweis auf Member 'fetch (with: parse: completion :)' Fehler. –

+0

@ JeffA.Ripke Code ist richtig, aber Sie haben das 'Protokoll' falsch implementiert. Sie mischen "Protokoll" und "Schließen". Die Art, wie Sie "Protokoll" aufrufen, ist nicht korrekt. Sie müssen es in der Klasse erben und nicht direkt aufrufen. –

+0

@ JeffA.Ripke Auf kürzere Weise kann ich sagen, dass "Protokoll" implementiert ist nicht direkt aufgerufen. –

Verwandte Themen