在 Swift 中向下转型

问题描述 投票:0回答:1

我在使用 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.
我想知道是否有可能的解决方法。

ios swift uiview uikit downcast
1个回答
0
投票

你总是可以沮丧,但有时只能向上。在这种情况下,您是说所有子视图都可以是任何东西;强制它们成为特定的视图类型,这样我们就可以将它们敲入这个数组中。根据您想要执行的操作,必须有一种更优雅的方法来执行此操作,但如果您确实需要解决方法,那么:

self.subviews[location].forEach { subView in
    if subView is ClassA {
        values.append(subView as! ClassA)
    }
}

这应该通过,因为验证子视图实际上是一个“CVla”

© www.soinside.com 2019 - 2024. All rights reserved.