将值从Closure赋值给Variable Swift

时间:2016-03-03 00:03:13

标签: ios swift closures alamofire swifty-json

我试图将从闭包中返回的值赋给我在闭包范围之外分配的变量。

我想这样做,所以我能够在我的闭包之外使用这个var,以便整洁,并且在这个闭包中没有所有这些嵌套代码。

我正在使用Alamofire请求和swify-json来帮助解析json。

我得到以下内容:

Error: variable 'userId' captured by a closure before being initialized

这是我的代码调用我的闭包函数:

var userId: Int

get()
{
    data in
    userId = data["used_id"].intValue
}

这是我的get()函数的实现:

func get(param: [String: AnyObject] = [String: AnyObject](), completion: (JSON) -> ())
{
    Alamofire.request(.GET, "apiendpoint.com", parameters: param)
    .responseJSON
    {
        response in
            switch response.result
            {
                case .Success:
                    let jsonData = JSON(data: response.data!)
                    completion(jsonData)
                case .Failure(let error):
                    print("Request failed with error: \(error)")
            }
    }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

var userId: Int更改为var userId: Int!

原因是当你"捕获它时,闭包期望一个值在变量中。通过使用强制展开的变量,闭包将能够捕获它,因为它保持值为nil,然后您可以在调用闭包时为其指定值。