【发布时间】:2014-12-23 15:00:43
【问题描述】:
使用可选项的全部原因是为了防止由于命中分配给 nil/null/none 的变量而导致运行时崩溃。因此,变量不能为零;相反,它们可以包装在一个可选类型中,将它们表示为 Some 或 None,并展开以获得 Some 或 nil 的特定内容。
但是,如果您使用 ! 或使用隐式展开的 Optionals 将它们全部展开,您只是引入了运行时崩溃的可能性,因为您是一个不完美的编码器。如果你使用if let 安全地解包它们,你可以避免崩溃,但是你被困在if let 语句的范围内以使用 Some 中的值,你仍然必须处理潜在的 nil 情况。如果你使用 ?为了调用一个方法而临时解包,完成后会被重新包装,引入了多层可选包装的混乱可能性。
所以:在我看来,除了必要时(例如,调用返回它们的框架方法时),要做的事情就是避免使用可选项。但是,如果我不使用可选项,这意味着我的对象引用必须是非零的,而且我不知道如何处理由于某种原因不应该存在或不存在的情况,分配给对象引用的值。
我的问题是:如何避免需要 nil?似乎它需要不同的编程方法。 (或者我应该只使用可选项,如果这就是我正在做的事情,它有什么比像其他语言那样简单地对对象引用进行空分配更好?)
我知道这可能是一个主观问题,但我还能在哪里问呢?我不是想挑衅或挑起争论,我真的很想知道在我编写更多 Swift 代码时正确的方法是什么。
【问题讨论】:
-
听说过面向铁路的编程吗?这是一篇在 f# fsharpforfunandprofit.com/posts/recipe-part2 中解释该概念的帖子
-
好问题,看看函数式编程和(可能)函数式 Swift
-
如果您因为过于主观而即将投票结束这个问题,您能否评论一下它有什么具体问题?这个问题真的是我怎么做的,而答案确实回答了它。如果您真的认为应该关闭它,我可以做些什么来改进它?