【发布时间】:2017-04-28 15:11:25
【问题描述】:
类定义中的可选项
我有一个“主模型”,我的大多数模型都从该模型继承,因此它们可以拥有配置常量
class MasterModel {
static let apiKey = (drop.config["app","thinx-api-key"]?.string)!
static let baseURL = (drop.config["app","base-URL"]?.string )!
}
注意力展开:( 在这种情况下,它并不是一个真正的大问题,因为没有这些常量程序将无法启动,但我还是想清理它。
guard 语句只允许在函数中,而不是在类定义中。用错误捕获定义这些常量的正确方法是什么
【问题讨论】:
-
只要你想让它们保持静态,你基本上就被困在这种方式下。另一种方法是使它们成为非静态计算属性,并在 getter 中做任何你想做的事情。
-
强制展开并不总是邪恶的。如果配置路径
thinx-api-key和base-URL是“硬编码的”,则只需强制解开选项。在这种情况下,缺少的键会显示设计错误。或者在某处添加assert行。 -
@vadian 我同意。在这种情况下,使用
?? ""是可能的。 -
@Sulthan 不,使用
!并打开可选的。我非常担心黑白建议永远不要强制打开可选选项,这是邪恶的。始终使用可选绑定。潜在的运行时错误和设计错误之间存在很大差异。如果您要访问应用程序包中的文件,请使用!,如果您要将表格视图单元格转换为自定义类,请使用!。如果您从日期中检索特定日期组件,请使用!。在这些情况下,欢迎发生崩溃,因为它揭示了一个不能发生的设计错误。 -
@vadian 我完全同意你的看法。在这种情况下,我也会使用
!。我只是建议?? ""作为一个潜在的替代方案。