2016-11-24 91 views
0

我遵循this Swift Post(由蘋果公司於2016年9月發佈)。爲什麼這個在Swift中的Apple例子不適合我?

的崗位實現了以下如下擴展

extension Restaurant { 
    private let urlComponents: URLComponents // base URL components of the web service 
    private let session: URLSession // shared session for interacting with the web service 

    static func restaurants(matching query: String, completion: ([Restaurant]) -> Void) { 
     var searchURLComponents = urlComponents 
     searchURLComponents.path = "/search" 
     searchURLComponents.queryItems = [URLQueryItem(name: "q", value: query)] 
     let searchURL = searchURLComponents.url! 

     session.dataTask(url: searchURL, completion: { (_, _, data, _) 
      var restaurants: [Restaurant] = [] 

      if let data = data, 
       let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { 
       for case let result in json["results"] { 
        if let restaurant = Restaurant(json: result) { 
         restaurants.append(restaurant) 
        } 
       } 
      } 

      completion(restaurants) 
     }).resume() 
    } 
} 

當我嘗試在我自己的項目,以重新創建此我得到以下信息:

不能援引「dataTask 'with an argument list of type'(with:String, completionHandler:() - >())'

爲什麼這個帖子和XCode 8.1告訴我的內容有什麼不一致?他們都在同一時間發佈。

我用的雨燕3.0

+0

這不是Swift3兼容(擴展屬性,++)。 – shallowThought

回答

0

你缺少in關鍵字,應該是。

編輯: 作爲@leo指出的,也是你的參數列表是錯誤的,變:
(_, _, data, _)(data, response, error)

因此,這是它應該是什麼:

session.dataTask(url: searchURL, completion: { (data, response, error) in 

請注意行末的in。這是closures taking arguments的語法。

+0

應該是'(數據,響應,錯誤)' –

+0

@LeoDabus好抓!難道這不是那也可能是錯誤的,只是看到了失蹤的「在」 – Sajjon

相關問題