Ios 如何在Swift 2.0中创建调度块数组?

Ios 如何在Swift 2.0中创建调度块数组?,ios,swift,swift2,grand-central-dispatch,Ios,Swift,Swift2,Grand Central Dispatch,我在Swift 1.2中有一个代码来创建一个调度块数组,它运行良好。但同样的代码在Swift 2.0中抛出错误 var menuView: btSimplePopUP! let actions: [dispatch_block_t] = [{self.pickImages()}, {self.takePicture()}, {self.pickVideos()}, {self.shootVideo()}, {self.recordAudio()}, {s

我在Swift 1.2中有一个代码来创建一个调度块数组,它运行良好。但同样的代码在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\u block\t创建NSArray

更新:

我已将上述代码替换为以下代码

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


任何帮助都将不胜感激。

dispatch\u block\t
不是从任何对象继承的,它不是对象。 但您可以修改代码并将
AnyObject
更改为
Any
,如下所示:

andActionArray : actions as [Any]
它应该对你有用

UPD:

您的函数将param作为
NSArray
,您只需将数组强制转换为此类型,此代码在我的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
导入
XCPlaygroundPage.currentPage.needsIndefiniteExecution=false
进口基金会
设a:dispatch_block_t={
打印(“a”)
}
设b:dispatch_block_t={
打印(“b”)
}
设arr=[a,b]
打印(arr.dynamicType)
arr.forEach{(b)->()在
b()
}
/*印刷品
数组()>
A.
B
*/
类块{
var块:调度块
初始化(块:调度块){
self.block=块
}
}
设block1=Block(Block:a)
设block2=Block(Block:b)
设arr2:NSArray=[block1,block2]
打印(arr2)
arr2.forEach{(p)->()在
(p作为?块)?.Block()
}
/*印刷品
(
块
块
)
A.
B
*/

感谢您的回复。。但是现在我得到以下错误“[dispatch\u block\t]不能转换为[Any]”显示您的
btSimplePopUP
init函数?那里的
andActionArray
是什么类型?没有你的代码,我帮不了你更多的忙。SimplePopup是一个开源软件,我用它来显示菜单。init函数的链接为,init函数从第284I行开始:我无法将其强制转换为NSArray。我收到这个错误,“[dispatch\u block\t]无法转换为NSarray”请查看我的更新问题。我已将操作类型更改为[Any],并且我无法得到任何编译时错误。但在运行时,我得到了“致命错误:数组元素无法桥接到Objective-C”,感谢您的回复。我需要将此数组作为NSArray传递给函数。通过时,我遇到了一个错误,“[dispatch_block_t]无法转换为NSarray”。是否将其作为NSArray传递?NSArray无法保存值类型。为此,您需要将调度块装箱。看看我的最新答案谢谢@user3441734现在,我可以把它转换成NSArray。但是我在函数定义中遇到了以下错误,
***NSForwarding:警告:类'ProjName.Block'的对象0x7a5841b0未实现methodSignatureForSelector:--无法识别的选择器-[ProjName.Block copy]
函数定义是,
-(instancetype)initWithImage:(UIImage*)图像标题:(NSString*)title action:(dispatch_block_t)action{if((self=[super init]){{title=[title copy];_imageView=[UIImageView alloc]initWithImage:image];_action=[action copy];}return self;}
aha…所以现在这是一个全新的问题:-)。我将检查您的objc代码的源代码。。。
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
*/