我有一个自定义对象叫做Field。基本上,我使用它来定义表单中的单个字段。
class Field {
var name: String
var value: Any?
// initializers here...
}
当用户提交表单时,我会验证每个
Field
对象以确保它们包含有效的值。有些字段不是必需的,因此我有时会故意将value
属性设置为nil
,就像这样:field.value = nil
当我使用if-let来确定一个字段是否为空时,这似乎会造成问题。
if let value = field.value {
// The field has a value, ignore it...
} else {
// Add field.name to the missing fields array. Later, show the
// missing fields in a dialog.
}
我在上面的if-else语句中设置了断点。当field.value故意被设置为nil时,它经过了if-let块,而不是else块。但是,对于我没有初始化和分配field.value的字段,程序进入else块。 我尝试在if-let块中打印出field.value和value:
if let value = field.value {
NSLog("field.value: \(field.value), value: \(value)")
}
这是我得到的结果:
因此,我认为使用可选项,未初始化和值为nil可能是两个不同的概念。但是,在if-let内部添加另一个if也无法使编译器满意。field.value:可选(nil),值:nil
if let value = field.value {
if value == nil { // Cannot invoke '==' with an argument list of type '(Any, NilLiteralConvertible)'
}
}
我该怎么做才能解决这个问题?我只想检查field.value
是否为nil
。
case CoreDataObject(NSManagedObject)
和case StringField(String)
,然后使用该枚举的可选项作为类型,而不是Any?
。 - Jesper