2017-02-16 66 views
0

我想我的靜態函數返回一個bool這樣static func search(email: String?) -> Bool關閉將值返回給outerblock?

我試圖做的註釋部分,但它被退回的封閉的返回值。我如何得到它的值返回到外調用函數search(email: String?)

static func search(email: String?){ 
     HTTPClient().apiQuery(.GET, endpoint: "user.jsn", params: ["user":["email": email!]], handler: { 
      response in 
      print(response) 
      switch response.result { 
      case .Success(let successJSON): 
       let successResponse = successJSON as! Dictionary<String, AnyObject> 
       if let error = successResponse["errors"] { 
        print(error) 
        // return false 
       } 
       // else { return true } 

      case .Failure : 
       print("Failure") 
       // return false 
      } 
     }) 
    } 

回答

4

你需要改變你的方法的簽名,以返回與您期待和內部apiQoery只是把它當你有數據類型完成處理程序:

static func search(email: String?, completion: (Dictionary<String, AnyObject>) ->()){ 
    .... 
    let successResponse = successJSON as! Dictionary<String, AnyObject> 
    completion(successResponse) 
    .... 
} 

你可以把它像:

YOURCLASSNAME.search(email: nil) { 
    responce in 
     // Use your dictionary here 
} 

在你的情況下,當方法返回字典,而是它可能會返回錯誤會更好地創建可以返回兩個對象,例如枚舉結果它很受歡迎。有關更多詳細信息,請參閱此link

0

我不知道有關靜態功能,但你可以使用completionHandler就像是Objective-C的

https://stackoverflow.com/a/39643395/4320266

typealias successSearch =() -> Bool 

func search(email: String?, isSuccess:successSearch){ 

} 

像這樣

希望它能幫助。