ปิดด้านในอีกปิด

Sep 11 2020

ในการใช้งานต่อไปนี้ฉันได้ปิดภายในการปิดอีกครั้งและต้องการส่งคืนการตอบกลับการปิดครั้งที่สอง func customerAccount() -> Result {} ฉันติดอยู่

public func customerAccount(){
  self.loadCurrentAccount { (account) in
   self.fetchData { (result) in
      // wonder how to return result from the parent method
      print(result)
  }
}

func fetchData(completion: @escaping(Result?) -> Void)  {
  guard let context = self.context else { return }
    
  let parameters = Parameters(scopes: scopes)
  context.fetchData(with: parameters) { (response, error) in
    if let error = error {
      completion(nil)
    }
    guard let response = response else {
      return
    }
    completion(response)
  } 
}

คำตอบ

1 MichaelMontalbano Sep 11 2020 at 09:35

ในสถานการณ์เหล่านี้ควรใช้บล็อกการทำให้เสร็จสมบูรณ์ การบล็อกเสร็จสิ้นจะส่งคืนค่า async ...

@IBAction func dataButtonClicked(_ sender: Any) {
 fetchData { (res) in
     self.result = res
 }
}

func fetchData(completion: @escaping (Result?) -> Void)  {
  guard let context = self.context else { 
    completion(nil) 
    return
  }
    
  let parameters = Parameters(scopes: scopes)
  context.fetchData(with: parameters) { (response, error) in
    if let error = error {
      completion(nil)
      return
    }
    guard let response = response else {
      completion(nil)
      return
    }
    completion(response)
  } 
}