Swift - 如何使内部属性可选

时间:2015-11-17 15:35:19

标签: swift optional

我的问题是关于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但其语法不正确

4 个答案:

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