返回值未定义的 swift



我目前的函数如下:

public func getToken() -> String {
    Alamofire.request("url", method: .post, encoding: JSONEncoding.default)
        .responseData { response in
            if let data = response.data {
                let xml = SWXMLHash.parse(data)
                let token  = ((xml["authResponse"] ["authToken"].element?.text))!
            }
        }
    return token // Test is undefined down here
}

我正在尝试让这个函数返回令牌字符串,但变量token未定义。

此代码存在多个问题。第一个也是最明显的是,token仅在内部闭包的范围内,因此没有定义return语句所在的位置。但是,第二个问题是您的 Alamofire 请求将异步发出,但您的 getToken 方法的签名假定将同步提供结果值。

我建议更改方法的签名,以接受另一个闭包作为参数作为"回调"方法。大致如下:

public func getToken(callback: ((String?) -> Void)) -> String {
    Alamofire.request("url", method: .post, encoding: JSONEncoding.default)
        .responseData { response in
            if let data = response.data {
                let xml = SWXMLHash.parse(data)
                let token  = ((xml["authResponse"] ["authToken"].element?.text))!
                callback(token)
            } else {
                callback(nil)
            }
        }
}

然后,你可以这样称呼它:

getToken(callback: { token in
    if let token = token {
        print("Got the token: (token)")
    } else {
        print("Didn't get the token: ¯_(ツ)_/¯")
    }
})

您可能希望添加一些更强大的错误处理,并且可能希望添加一种消除错误和返回的实际nil值之间的歧义的方法(如果可能的话(。我还建议摆脱getToken方法中的强制解包。希望这可以解决您最初的问题。

最新更新