我有一个 Bool 类型的局部变量初始化为 FALSE。我试图根据特定条件在 try block 中设置 this 的值。条件为真,值变为真。当检查 block 内部和外部的值时,它们是不同的。内部为 true,外部为初始化值,即;错误。
func Print() -> Bool{
print(userName)
print(password)
var statusValue:Bool = False
let request: Request = Request()
let body: NSMutableDictionary = NSMutableDictionary()
do{
try request.post(url: url, body: body, completionHandler: { data, response, error in
if error != nil{
print(error?.localizedDescription)
return
}
let statuscode = response as? HTTPURLResponse
print("error:",error)
print("status code:",statuscode?.statusCode)
if statuscode?.statusCode == 200 {
print("Success")
statusValue = True
}
else{
print("Fail")
}
})
}
catch{
print("Not me error")
}
print("Printing status value outside:",statusValue)
return statusValue
}
“statusValue”的值打印不同。内部设置为 True,外部打印 False。
最佳答案
当您的代码是同步时,从函数返回值是有效的,但在您的情况下,您正在发出网络请求(异步调用),因此结果将可用在一些毫秒或秒之后,返回值没有任何意义。
相反,您可以使用闭包“返回”结果,如下所示:
func Print( completion: @escaping (_ statusValue: Bool) -> Void ) -> Void {
var statusValue:Bool = False
let request: Request = Request()
let body: NSMutableDictionary = NSMutableDictionary()
do{
try request.post(url: url, body: body, completionHandler: { data, response, error in
if error != nil{
print(error?.localizedDescription)
completion(false)
return
}
let statuscode = response as? HTTPURLResponse
if statuscode?.statusCode == 200 {
print("Success")
statusValue = True
completion(statusValue)
}
else{
completion(false)
}
})
}
catch{
completion(false)
}
}
<小时/>
当您调用该函数时:
Print(completion: { statusValue in
print(statusValue)
})
关于swift - 为什么局部变量的值没有在 try block 中初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40020168/