我尝试从我的故事板(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的初学者,所以我非常感谢你的帮助!
如果您有任何其他问题,请在下面写下评论。
谢谢! : - )
答案 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!")
}