【发布时间】:2017-07-22 23:55:31
【问题描述】:
假设我有一个函数接受Int,但不只是任何Int。可能是:
- 只有自然数
-
Ints从 2 到 200 - 等
假设有效值的数量太大而无法使用明确声明所有这些值都是可行方法的Enum。
有没有办法在 Swift 中声明一个指定封闭范围的类型?
我尝试使用Range,但它没有按预期工作。
【问题讨论】:
假设我有一个函数接受Int,但不只是任何Int。可能是:
Ints 从 2 到 200假设有效值的数量太大而无法使用明确声明所有这些值都是可行方法的Enum。
有没有办法在 Swift 中声明一个指定封闭范围的类型?
我尝试使用Range,但它没有按预期工作。
【问题讨论】:
我能想到的最好的方法是将Int 包装在一个带有初始化器的结构中,该初始化器会强制执行您的条件:
struct NameMe {
let value: Int
init?(_ value: Int) {
guard 2...200 ~= value else { return nil }
self.value = value
}
}
虽然单独使用Int 需要在每个需要此类值的地方进行运行时条件检查,但此技术将其限制为仅首先创建此类值的地方。创建后,您可以传递 NameMe 实例,知道它们的值满足先决条件。
【讨论】:
您可以使用存储属性来存储实际值并使用计算属性来获取和设置值到存储属性强>。在 Computed Property 的 set 中进行一些验证。这样你就可以限制价值
【讨论】: