【问题标题】:Can't access value outside of completion handler无法访问完成处理程序之外的值
【发布时间】:2016-11-25 18:44:36
【问题描述】:

下面的代码给了我一个错误,因为“return self.myID”应该在最后一个大括号中。虽然如果我这样做,它会将 self.myID 声明为未解析的标识符,因为它在闭包之外。我怎样才能做到这一点,以便我可以在完成处理程序之外访问 self.myID 并放置返回值。

   func chatPartnerId() -> String? {
        nextrequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection! , result: AnyObject!, error: NSError!) -> Void in
            self.myID = result["id"] as! String
            return self.myID

        }
    }

【问题讨论】:

    标签: swift closures


    【解决方案1】:

    不要返回String,而是使用completion handler

    func chatPartnerId(completion: (result: AnyObject?, error: NSError?)->()) {
            nextrequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection! , result: AnyObject!, error: NSError!) -> Void in
                if((error) != nil){
                   completion(result:nil,error:error)
                }
                else{
                    self.myID = result["id"] as! String
                    completion(result:self.myID, error:nil)
                }
    
    
            }
        }
    

    称之为

     chatPartnerId() { (result,error) -> Void in
           if let error = error{
              print(error)
           }
           if result != nil {
               print(result)
    
           }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多