我想用以下签名编写一个函数:
func viewHasSuperviewOfClass(view: UIView, superclass: AnyObject.Type) -> Bool {
return view.superview is superclass
}
但是它不会编译。我究竟做错了什么?如何传递超类并将其视为参数?
通过superclass
asAnyClass
并用于对其isKind(of:)
进行测试:
func viewHasSuperviewOfClass(view: UIView, superclass: AnyClass) -> Bool {
return view.superview?.isKind(of: superclass) ?? false
}
由于view.superview
是可选的,因此需要将其拆开。使用可选的链接将返回nil
如果没有上海华盈,所以使用零合并运算符 ??
,以回报false
,如果没有superview
。
例子:
let button = UIButton()
let label = UILabel()
label.addSubview(button)
viewHasSuperviewOfClass(view: button, superclass: UILabel.self) // true
viewHasSuperviewOfClass(view: label, superclass: UIButton.self) // false
如果您对此进行函数签名,则阅读起来会更好一些:
func view(_ view: UIView, hasSuperviewOfClass superclass: AnyClass) -> Bool {
return view.superview?.isKind(of: superclass) ?? false
}
// example call
view(button, hasSuperviewOfClass: UILabel.self)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句