之前我的项目中有这一行并且效果很好:
superview.viewWithTag(kGridViewTag).hidden = !superview.viewWithTag(kGridViewTag).hidden
XCode-beta5向我显示错误:
'UIView?' does not have a member named 'viewWithTag'
我如何解决它:
superview!.viewWithTag(kGridViewTag)!.hidden = !superview!.viewWithTag(kGridViewTag)!.hidden
但是看起来太丑了,不能成为Swift-way。
解决此问题的正确方法是什么?
答案 0 :(得分:3)
superview
是可选的(因为视图可能没有超视图),和
viewWithTag()
也会返回一个可选项(因为带有给定标记的子视图)
可能不存在)。在测试版4中,两种方法都返回了一个隐式解包的可选项
UIView!
。在测试版5中,返回类型更改为普通的可选UIView?
。
检查这两种情况的简明方法是组合“可选链接” “可选的任务”:
if let theView = superview?.viewWithTag(kGridViewTag) {
theView.hidden = !theView.hidden
// Alternatively: theView.hidden ^= true
}
编译beta 4和beta 5。