我在使用 Swift 时遇到问题。我有课:
class ClassA : UIView{
override public init(frame: CGRect) {
super.init(frame: frame)
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
init(from uiview: UIView) {
super.init(frame: .zero)
}
}
然后我还有另一个类PageViewer
class PageViewer: UIView{
var values : [ClassA]?
var location: Int = 0
public func test(){
for i in 0..<values!.count {
location = i
values![i] = self.subviews[location] as! ClassA
}
}
}
问题: 我正在尝试将 UIViews 作为子视图添加到页面查看器中,但我在这一行遇到运行时异常
values![i] = self.subviews[location] as! ClassA
说 Could not cast value of type 'UIView' to 'MyTestApp.ClassA.
我想知道是否有可能的解决方法。
你总是可以沮丧,但有时只能向上。在这种情况下,您是说所有子视图都可以是任何东西;强制它们成为特定的视图类型,这样我们就可以将它们敲入这个数组中。根据您想要执行的操作,必须有一种更优雅的方法来执行此操作,但如果您确实需要解决方法,那么:
self.subviews[location].forEach { subView in
if subView is ClassA {
values.append(subView as! ClassA)
}
}
这应该通过,因为验证子视图实际上是一个“CVla”