为什么'image'不是'UIImageView'或'UIImage'的成员?

时间:2017-05-06 18:43:46

标签: swift uiimage

我尝试从我的故事板(211)中具有唯一标记的UIImageView访问图像。如果图像为空,则图像应为零。到目前为止我的代码:

if self.view.viewWithTag(211).image != nil{
            print("EXISTS!")
        }

这有效(打印存在):

if self.view.viewWithTag(211) != nil{
          print("EXISTS!")
}

我认为viewWithTag()搜索标签的所有视图(所有子视图和视图本身)。找到了标签,但Xcode(8)给出了以下错误:“类型'UIView的价值?'没有会员'image'“。但我也认为UIImageView是UIView的子类,不是吗?所以viewWithTag()应该可以工作。 我试图改变我的代码:

if self.view.viewWithTag(211) as! UIImageView.image? != nil{
                print("EXISTS!")
            }

但它告诉我这个: “var'image'不是'UIImageView'的成员类型。”

我是Xcode和Swift的初学者,所以我非常感谢你的帮助!

如果您有任何其他问题,请在下面写下评论。

谢谢! : - )

1 个答案:

答案 0 :(得分:2)

.image属性可用于UIImageView实例 上课,而不是班级本身。所以这会编译:

if (self.view.viewWithTag(211) as! UIImageView).image != nil {
    print("EXISTS!")
}

但如果没有带标记211的视图,它会在运行时崩溃,或者 如果该视图不是的实例 UImageView(或某些子类)。安全版本是使用as?的可选投射:

if (self.view.viewWithTag(211) as? UIImageView)?.image != nil {
    print("EXISTS!")
}

如果将其与可选绑定结合使用,则可以打开包装 “成功”案例中的UIImage

if let imageView = self.view.viewWithTag(211) as? UIImageView {
    if let image = imageView.image {
        print("EXISTS!")
    }
}

这可以缩短为

if let imageView = self.view.viewWithTag(211) as? UIImageView,
    let image = imageView.image {
    print("EXISTS!")
}

if let image = (self.view.viewWithTag(211) as? UIImageView)?.image {
    print("EXISTS!")
}