在Swift中对超视图进行类比转换

时间:2017-12-05 23:27:23

标签: ios swift uiview uikit

我已经将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答案对我来说并不清楚,但这里提供的答案是。

1 个答案:

答案 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

但不需要类型注释。