次のコードは、配列を作成するために Swift 2.0 で記述されています。dispatch_block_t
let a: dispatch_block_t = {
self.pickImages()
}
let b: dispatch_block_t = {
self.takePicture()
}
let c: dispatch_block_t = {
self.pickVideos()
}
let d: dispatch_block_t = {
self.shootVideo()
}
let e: dispatch_block_t = {
self.recordAudio()
}
let f: dispatch_block_t = {
self.closeView()
}
let block1 = Block(block: a)
let block2 = Block(block: b)
let block3 = Block(block: c)
let block4 = Block(block: d)
let block5 = Block(block: e)
let block6 = Block(block: f)
let actionsArray: NSArray = [block1, block2, block3, block4, block5, block6]
また、Block
クラスは次のように定義されています。
class Block: NSObject, NSCopying {
var block: dispatch_block_t
init(block: dispatch_block_t){
self.block = block
}
func copyWithZone(zone: NSZone) -> AnyObject {
return self.block as! AnyObject
}
}
上記のコードを使用して、dispatch_block_t の配列を作成できます。しかし、この配列をパラメーターとして別の関数に渡す必要があり、この配列を渡す際に問題に直面しています。
ボタンクリックイベントでこの関数を呼び出していますが、
menuView = btSimplePopUP(itemImage: imgs as [AnyObject],
andTitles: titles as [AnyObject],
andActionArray: actionsArray as [AnyObject],
addToViewController: self)
そして、次のスニペットを実行するとエラーが発生します。
- (instancetype)initWithImage:(UIImage *)image title:(NSString *)title action:(dispatch_block_t)action {
if ((self = [super init])) {
_title = [title copy];
_imageView = [[UIImageView alloc]initWithImage:image];
_action = [action copy];
}
return self;
}
エラーは、
タイプ '() -> ()' (0x15164018) の値を 'Swift.AnyObject' (0x101e500c) にキャストできませんでした。
クラスcopyWithZone
の関数でこのエラーが発生しています。Block
btSimplePopUp の完全なソース コードは、 https: //github.com/balram3429/btSimplePopUp/blob/master/btSimplePopUp/btSimplePopUP.m で確認できます 。