为什么在try块中没有初始化局部变量的值。

时间:2016-10-13 11:49:25

标签: swift swift3

我有一个Bool类型的局部变量初始化为FALSE。我试图根据特定条件在try块中设置this的值。条件为真,值变为真。检查块内外的值时,它们是不同的。在里面是真的,在外面它需要初始值,即;假的。

/**
 * Single view of a news record
 *
 * @param \Vendor\Ext\Domain\Model\News $news news item
 */
public function detailAction(\Vendor\Ext\Domain\Model\News $news = null)

" statusValue"的值打印不同。在里面它设置为True,在它外面打印False。

1 个答案:

答案 0 :(得分:0)

当您的代码同步时,从函数返回值有效但在您的情况下,您正在进行网络请求(异步调用),因此结果将在毫秒之后可用,然后返回一个值没有任何意义。

相反,你可以"返回"使用闭包的结果如下:

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)
})