注意:这不是一个仅限Swift的问题,它与Optional
类型的每种语言都有关系。
我看到一些Swift项目正在这样做:var foo: Foo = NoOpFoo()
AFAIK这基本上意味着“此foo不执行任何操作”,也可以表示为var foo: Foo? = nil
我想知道NoOp
而不是Optional
决策背后的原因是什么?
Optional
似乎在汇编输出中增加了几行(但是我对此并不十分信服)。NullPointerException
会很棘手,因此NoOp
可能会派上用场...但是在Swift中?Here is an example from swift-log project:
public struct Logger {
var handler: LogHandler
internal init(_ handler: LogHandler) {
self.handler = handler
}
}
public struct SwiftLogNoOpLogHandler: LogHandler { ... }
Logger
旨在与LogHandler
一起使用;据我了解,如果您将NoOpHandler
传递给Logger
,那么您应该将yourLogger: Logger
变成myLogger: Logger? = nil
真实的用例和/或您的个人经验将不胜感激!