将闭包的值赋给变量 Swift
Assign Value from Closure to Variable Swift
我正在尝试将从闭包返回的值分配给我在闭包范围之外分配的变量。
我想这样做,这样我就可以在我的闭包之外使用这个 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)")
}
}
}
感谢您的所有帮助!
将var userId: Int
更改为var userId: Int!
原因是当您 "capture it" 时闭包期望变量中有一个值。通过使用强制展开的变量,闭包将能够捕获它,因为它的值为 nil,然后您可以在调用闭包时为其赋值。
我正在尝试将从闭包返回的值分配给我在闭包范围之外分配的变量。
我想这样做,这样我就可以在我的闭包之外使用这个 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)")
}
}
}
感谢您的所有帮助!
将var userId: Int
更改为var userId: Int!
原因是当您 "capture it" 时闭包期望变量中有一个值。通过使用强制展开的变量,闭包将能够捕获它,因为它的值为 nil,然后您可以在调用闭包时为其赋值。