如何在Swift 2.0中创build一个dispatch_block_t数组?

我有一个Swift 1.2中的代码来创build一个dispatch_block_t数组,它工作正常。 但是相同的代码在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) 

上面的代码在Swift 1.2中工作正常。 但在Swift 2.0中,它会抛出以下错误

[dispatch_block_t]不能转换为NSArray

我怎样才能用dispatch_block_t创build一个NSArray?

更新:

我用下面的代码replace了上面的代码,

 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) 

现在,以前的错误消失了。 但是我在运行时遇到以下错误,

致命错误:数组元素不能桥接到Objective-C

任何帮助将不胜感激。

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

dispatch_block_t不是从AnyObjectinheritance的,它不是对象。 但是你可以修改你的代码,把AnyObject Any就像这样:

 andActionArray : actions as [Any] 

它应该为你工作。

UPD:

你的函数需要param作为NSArray ,你可以简单地将你的数组转换为这种types,这个代码在我的swift游乐场中工作:

 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