我已经将UIView子类化了,我正在尝试访问它的超级视图,但它是作为UIView而不是我的子类的类型返回的。
这是一个Swift 4 Playground,显示了问题的过度简化。
import UIKit
class SubUIView: UIView {}
var parent:SubUIView = SubUIView()
var child:SubUIView = SubUIView()
parent.addSubview(child)
var other:SubUIView = child.superview
如何将child.superview强制转换为SubUIView?
目前,它会抛出此错误:
无法转换类型的价值' UIView?'指定类型' SubUIView'
以前针对此主题的Stakeoverflow答案对我来说并不清楚,但这里提供的答案是。
答案 0 :(得分:2)
superview
是您的视图子类继承的UIView
上的属性。如果您想将通过调用返回的视图转换为superview
,则主要有两个选项:
强制投射,其中other
的类型为SubUIView
。如果此操作失败 - 即超级视图实际上不是类型SubUIView
,则应用程序将崩溃。这完成了:
var other = child.superview as! SubUIView
您也可以使用as?
代替as!
。这样other
的类型将为SubUIView?
,如果转换失败,则值为nil。
如果将类型注释添加到其他注释,则必须匹配投射操作的结果。如:
var other: SubUIView = child.superview as! SubUIView
var other: SubUIView? = child.superview as? SubUIView
但不需要类型注释。