我的问题是关于swift中的选项。假设我已经定义了以下内容:
if let myCell = cell as? AECell {
if !myCell.someView.hidden{
//how do i use optional on someView, perhaps someView will not exists
}
}
正如你所看到的,如果someView为nil,如果someView不是nil,我如何使用这里的可选语句只执行if语句..i尝试了问号:
if !myCell.someView?.hidden
但其语法不正确
答案 0 :(得分:1)
if let myCell = cell as? AECell, let someView = myCell.someView {
// someView is unwrapped now
}
答案 1 :(得分:0)
您可以使用可选链接
if let myView = (cell as? AECell).someView {
if !myView.hidden{
// do something
}
}
答案 2 :(得分:0)
要直接回答这个问题,是的,你可以这样使用选项。必须将单元格的someView属性定义为可选。
class MyCell: UICollectionViewCell {
var someView: AECell?
}
然后您可以使用以下语法:
myCell.someView?.hidden = true
您所谈论的行为非常类似于Objective-C的无消息传递行为。在Swift中,您希望在操作之前更倾向于确认对象的存在。
guard let myView = myCell.someView as? AECell else {
// View is nil, deal with it however you need to.
return
}
myView.hidden = false
答案 3 :(得分:0)
这应该这样做:
if let myCell = cell as? AECell, let myView = myCell.someView where !myView.hidden {
// This gets executed only if:
// - cell is downcast-able to AECell (-> myCell)
// - myCell.myView != nil (-> unwrapped)
// - myView.hidden == false
}