无法在完成处理程序之外访问值

时间:2016-07-22 01:06:43

标签: swift closures

以下代码给出了一个错误,因为'返回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

        }
    }




1 个答案:

答案 0 :(得分: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)

       }
    }