簡體   English   中英

為什么在try塊中未初始化局部變量的值。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM