2016-09-20 113 views
2

我已经写了一个在swift 2.2中并发API调用的代码。当我从swift 2.2更改为swift 3时,我正面临着swift语法的问题。帮我出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