1

나는 기능 다음에 완료 핸들러를Completion Handler dispatch_async에서 오류가 발생 했습니까?

static func fetchFeatureApp(completionHandler:@escaping ([AppCategory1])->()){ 
     let urlString="http://ebmacs.net/ubereats/Api/all_product?id=1" 
     let url = URL(string: urlString)! 

    URLSession.shared.dataTask(with: URLRequest(url: url)){ (data, responce, error) in 
     if error != nil 
      { 
       print(error) 
       return 
      } 
     do { 
      if let jsonResult = try JSONSerialization.jsonObject(with:data!) as? [String:Any] { 
       if let products = jsonResult["products"] as? [[String:String]] { 
        var appCategories = [AppCategory1]() 
        for product in products { 
         let category = AppCategory1(id: product["product_id"] ?? "", 
                name: product["product_name"] ?? "", 
                description: product["product_description"] ?? "", 
                url: product["image_url"] ?? "", 
                price: product["product_price"] ?? "") 
         appCategories.append(category) 
        } 
        print("Abc=") 
        print(appCategories) 
        dispatch_async(dispatch_get_main_queue(), { 
         completionHandler(appCategories) 
        }) 

       } 
      } 
     } catch { 
      print(error) 
     } 
     }.resume() 

    } 

위 함수의 파견 비동기 오류를주고있다

dispatch_async(dispatch_get_main_queue(), { 
        completionHandler(appCategories) 
       }) 

오류 문이다

'dispatch_async이'인스턴스에 의해 대체되었습니다

메서드 'DispatchQueue.async (execute :)' 'dispatch_get_main_queue()'가 속성로 대체되었습니다.'DispatchQueue.main'

이 오류를 수정하는 방법?

나는

AppCategory.fetchFeatureApp { (appcategories) in 
      self.appcategories = appcategories 
      self.collectionView?.reloadData() 
     } 

그것은 오류를 유형의

값을주고있다 '는 FeaturedViewController'가이 함수를 호출 오전에는 멤버 'appcategories 없다'

를 해결하는 방법 함수 호출?

답변

1

이것은 (나중에 스위프트 3) 현대 구문입니다 : 내가 매개 변수를 사용하여이 함수를 호출하는 것을 시도하고있다

DispatchQueue.main.async { completionHandler(appCategories) } 
+0

는 handler.Is에게 해당 기능을 ... AppCategory.fetchFeatureApp {호출이 올바른 방법 완성형 (appcategories) in self.appcategories = appcategories self.collectionView? .loadData() } –