[英]Why does the value of a local variable is not being initialised in try block.
我有一個初始化為FALSE的Bool類型的局部變量。 我正在嘗試根據特定條件在try塊中設置此值。 條件為true,值變為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)
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.