关闭将值返回到outerblock?

时间:2017-02-16 08:56:41

标签: ios swift

我希望我的静态函数返回bool static func search(email: String?) -> Bool

我尝试做了注释掉的部分,但它作为闭包的返回值返回。如何让它将值返回到外部调用函数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
            }
        })
    }

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我不确定静态函数,但你可以像使用Objective-C一样使用completionHandler

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

typealias successSearch = () -> Bool

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

}

类似这样的事情

希望它有所帮助。