2016-09-20 6 views
2

Ich habe einen Code für gleichzeitige API-Aufrufe in Swift 2.2 geschrieben. Wenn ich von swift 2.2 zu swift 3 übergehe, sehe ich mich mit der Syntax von swift konfrontiert. Helfen Sie mirSwift 3 Konvertierung

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

Welche Zeile Code verlangen? –

+0

@ Mr.UB Insbesondere dispatch_apply und dispatch_group_notify – venky

+0

Sie scheinen die Versandgruppe nicht zu verwenden. Eine Gruppe zu melden macht also keinen Sinn. Normalerweise verwenden Sie Gruppen, wenn Sie eine Reihe von asynchronen Aufrufen ausführen, aber dispatch_apply ist synchron und Sie würden es normalerweise nicht verwenden, wenn Sie Routinen aufrufen, die selbst asynchron sind. – Rob

Antwort

3

Haben Sie noch dispatch_apply erinnern(). Nun, es ist immer noch da und hat einen neuen Namen bekommen. Ab sofort kann man besonders 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") 
     } 
    } 

für weitere Informationen siehe this

Verwandte Themen