Следующий код записываются в Swift 2.0, чтобы создать массив dispatch_block_t
Как реализовать copyWithZone в Swift 2.0?
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
вы задали тот же вопрос в третий раз, что ошибка у которой сталкиваются при конверсии или тип cast –
Раньше я не мог создайте массив dispatch_block_t. Но теперь я создал массив. Но я не мог обработать его в функции, определенной в другом классе. –
'*** NSForwarding: warning: object 0x7a5841b0 класса 'ProjName.Block' не реализует методSignatureForSelector: - проблема впереди Unrecognized selector - [ProjName.Block copy]' Я получил эту ошибку перед определением функции 'copyWithZone' в' Block'. После определения этого параметра я получаю следующую ошибку: 'Невозможно передать значение типа '() ->()' (0x15164018) в 'Swift.AnyObject' (0x101e500c) .'. У вас есть идея решить эту проблему? –