'的UIView?没有名为'viewWithTag'的成员

时间:2014-08-05 10:31:38

标签: swift xcode6

之前我的项目中有这一行并且效果很好:

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。

解决此问题的正确方法是什么?

1 个答案:

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