example dispatchqueue dispatch_async async ios swift swift2 grand-central-dispatch

ios - dispatchqueue - ¿Cómo crear una matriz de dispatch_block_t en Swift 2.0?



nsoperationqueue swift 3 example (2)

dispatch_block_t no se hereda de AnyObject, no es objeto. Pero puedes modificar tu código y cambiar AnyObject a Any como este:

andActionArray : actions as [Any]

Y debería funcionar para ti.

UPD:

Su función toma param como NSArray , simplemente puede lanzar su matriz a este tipo, este código funciona en mi patio de recreo rápido:

func pickImages() {} func takePicture() {} func shootVideo() {} let actions: [dispatch_block_t] = [{pickImages()}, {takePicture()}, {shootVideo()}] var actionArray: NSArray = actions as NSArray // pass it to the btSimplePopUP init

Tengo un código en Swift 1.2 para crear una matriz de dispatch_block_t y funciona bien. Pero el mismo código arroja un error en Swift 2.0.

var menuView: btSimplePopUP! let actions: [dispatch_block_t] = [{self.pickImages()}, {self.takePicture()}, {self.pickVideos()}, {self.shootVideo()}, {self.recordAudio()}, {self.closeView()}] menuView = btSimplePopUP(itemImage: imgs as [AnyObject], andTitles: titles as [AnyObject], andActionArray: actions as NSArray as [AnyObject], addToViewController: self)

El código anterior funciona bien en Swift 1.2. Pero en Swift 2.0, arroja el siguiente error

[dispatch_block_t] no es convertible a NSArray

¿Cómo puedo crear un NSArray con dispatch_block_t?

ACTUALIZAR:

He reemplazado el código anterior con el siguiente,

let actions: [Any] = [{self.pickImages()}, {self.takePicture()}, {self.pickVideos()}, {self.shootVideo()}, {self.recordAudio()}, {self.closeView()}] menuView = btSimplePopUP(itemImage: imgs as [AnyObject], andTitles: titles as [AnyObject], andActionArray: actions as! [AnyObject], addToViewController: self)

Ahora, el error anterior se ha ido. Pero recibo el siguiente error en tiempo de ejecución,

error fatal: el elemento de matriz no se puede puentear con Objective-C

Cualquier ayuda será apreciada.


import XCPlayground XCPlaygroundPage.currentPage.needsIndefiniteExecution = false import Foundation let a: dispatch_block_t = { print("a") } let b: dispatch_block_t = { print("b") } let arr = [a,b] print(arr.dynamicType) arr.forEach { (b) -> () in b() } /* prints Array<@convention(block) () -> ()> a b */ class Block { var block: dispatch_block_t init(block: dispatch_block_t){ self.block = block } } let block1 = Block(block: a) let block2 = Block(block: b) let arr2: NSArray = [block1,block2] print(arr2) arr2.forEach { (p) -> () in (p as? Block)?.block() } /* prints ( Block, Block ) a b */