我在数组中有一个UIButton,我想将其子类化为SpringButton(https://github.com/MengTo/Spring)。我试过这个:
let springButton = playableCards[cardIndex] as! SpringButton
但是我收到了这个错误:
无法将'UIButton'(0x1126bf120)类型的值转换为'Spring.SpringButton'(0x10e6e62e8)。
我不想在故事板中创建插座或更改它。这是来自Swift的错误,还是来自pod本身的错误?
欢迎任何帮助!
编辑:
var playableCards: [UIButton] = []
playableCards = self.allPlayableCardsViews[0].allSubviews.flatMap { $0 as? UIButton }
allPlayableCardsViews只是一个普通的UIView。
答案 0 :(得分:2)
如果故事板场景中的项目类别为UIButton
,则对象 为UIButton
,您无法将其作为其他内容向下转发。如果您希望按钮为SpringButton
,并且它们是由故事板场景创建的,则需要在故事板中设置自定义类 。
由于SpringButton
是UIButton
的子类,因此您可以在预期SpringButton
的任何地方传递UIButton
。只要基础对象 为UIButton
,您也可以将SpringButton
类型的变量向下转换为SpringButton
。有as?
的条件向下转发比强制转发更安全。
想象一下,你有一个停车位。车辆可以停放在空间中。摩托车和汽车都是车辆的类型(如果你愿意,也可以是子类),所以要么可以停放在那里。但是,无论车辆是汽车还是摩托车,都是在建造时确定的。你不能简单地将摩托车改装成汽车,但这就是你试图用你的按钮做的事情。