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
*/