I have an issue using Swift. I have a class:
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)
}
}
Then I have another class 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
}
}
}
problem:
I'm trying to add UIViews as sub-views to the pageviewer but I'm getting a run time exception on this line values![i] = self.subviews[location] as! ClassA
saying Could not cast value of type 'UIView' to 'MyTestApp.ClassA.
I want to know if there is a possible workaround for this.
You can always cast down, but only sometimes cast up. In this case, you are saying all of the subviews can be anything; force them to be a specific view type so we can hammer them into this array. Depending on what you are trying to do, there must be a more elegant way of doing it, but if you really need a workaround, then:
self.subviews[location].forEach { subView in
if subView is ClassA {
values.append(subView as! ClassA)
}
}
That should pass because is validating the subview is in fact a `CVla