2017-02-16 35 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){ 

} 

像这样

希望它能帮助。