2016-09-20 8 views
2

swift 2.2で並列API呼び出しのコードを記述しました。私がswift 2.2からswift 3に変更するとき、私はswiftの構文で問題に直面しています。スウィフト3の変換

let endPoints = [.email, .others] 
    let fetchGroup = dispatch_group_create() 
    let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_apply(endPoints.count, queue) { (index) in 
     let enumType = endPoints[index] 
     switch enumType { 
     case .email: 
      //Make email api call 
      break 
     case .others: 
      //Make other api 
      break 
     default: 
      break 
     } 
    } 

    dispatch_group_notify(fetchGroup, dispatch_get_main_queue()) { 
     if endPoints.count > 0 { 
      fail("error") 
     } 
    } 
+0

を参照してください? –

+0

@ Mr.UB特に、dispatch_applyおよびdispatch_group_notify – venky

+0

あなたはディスパッチグループを使用していないようです。グループに知らせることはあまり意味がありません。通常は一連の非同期呼び出しを実行するときにグループを使用しますが、dispatch_applyは同期式であり、通常は非同期のルーチンを呼び出すときには使用しません。 – Rob

答えて

3

あなたはまだdispatch_apply()を覚えていますか私を助けて。まあ、それはまだそこにあり、新しい名前を得ました。今からあなたはconcurrentPerformを(呼び出す必要があります)詳細については、

let endPoints = [.email, .others] 
    let fetchGroup = DispatchGroup() 
    let queue = DispatchQueue.global (qos : .default) 
    DispatchQueue.concurrentPerform(iterations: endPoints.count) 
    { (index) in 
     let enumType = endPoints[index] 
     switch enumType { 
     case .email: 
      //Make email api call 
      break 
     case .others: 
      //Make other api 
      break 
     default: 
      break 
     } 
    } 
    DispatchGroup().notify(queue: DispatchQueue.main) { 
     if endPoints.count > 0 { 
      fail("error") 
     } 
    } 

特にコードの行this

関連する問題