gpt4 book ai didi

ios - 无论枚举大小写如何,如何快速获得枚举的关联值

转载 作者:IT王子 更新时间:2023-10-29 05:15:57 26 4
gpt4 key购买 nike

我有一个对象 FormField,它有两个属性:一个字符串 name 和一个可以接受任何类型的 value——因此我把它变成了 任何!。然而,有人告诉我 a separate question使用具有关联值的枚举而不是 Any!

enum Value {
case Text(String!)
case CoreDataObject(NSManagedObject!)
}

class FormField {
var name: String
var value: Value?
// initializers...
}

然而,这种方法使得检查无效性变得非常冗长。如果我想为表单中所有缺失的字段显示一个警报 View ,我将不得不在 switch 语句中对每个 case 重复一次 nil 检查:

for field in self.fields {
if let value = field.value {
switch value {
case .Text(let text):
if text == nil {
missingFields.append(field.name)
}
case .CoreDataObject(let object):
if object == nil {
missingFields.append(field.name)
}
}
}
}

有没有更短的方法来访问枚举的关联值,而不考虑类型?如果我将 FormField.value 设置为 Any!,上面的代码将非常简单:

for field in self.fields {
if field.value == nil {
missingFields.append(field.name)
}
}

最佳答案

enum 中定义一个方法 isMissing() - 只写一次。然后你几乎完全得到你喜欢的东西:

for field in self.fields {
if field.value.isMissing() {
missingFields.append(field.name)
}
}

它看起来像这样(来自 Swift Interpreter):

  1> class Foo {}
>
2> enum Value {
3. case One(Foo!)
4. case Two(Foo!)
5.
6. func isMissing () -> Bool {
7. switch self {
8. case let .One(foo): return foo == nil
9. case let .Two(foo): return foo == nil
10. }
11. }
12. }
13> let aVal = Value.One(nil)
aVal: Value = One {
One = nil
}
14> aVal.isMissing()
$R0: Bool = true

关于ios - 无论枚举大小写如何,如何快速获得枚举的关联值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25880789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com