如何在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
- 我们如何在iOS应用程序转到后台时调度Google Analytics事件?
- Swift 3:DispatchQueue.main.async {}和DispatcQueue.main.async之间的区别(execute:{})?
- 如果我嵌套dispatch_async调用会发生什么?
- Swift 3转换
- 混合同步/asynchronous与串行/并发队列时,调度程序如何工作?
- 主线程在viewDidLoad中的一个并发队列上执行dispatch_async,或者在一个方法内部执行
- 全局队列中的定时器不在iOS中调用
- 你可以用GCD / dispatch_async使用cancel / isCancelled吗?
- 与GCD重用UITableViewCell