使用此代码,如果任何表单值不是nil
:
myButton.isEnabled = !myForm.values.contains(where: { $0 == nil })
有没有办法添加多个支票?我想启用我的按钮:
(即,该值不应为零,不应超出0.0 - 2.0范围)
我还可以使用contains(where:)来做吗?
MyForm是一个像这样的词典:
["oct": nil,
"jan": Optional(3666.0),
"nov": nil,
"apr": nil,
"sep": nil,
"feb": nil,
"jul": nil,
"mar": nil,
"dec": nil,
"may": nil,
"jun": nil,
"aug": nil]
(奇怪的是,由于第三方库的行为,它接受nil
值)
答案 0 :(得分:1)
你可以通过过滤所有这样的值来实现:
class Offers(models.Model):
product_id = models.CharField(max_length=10)
original_price = models.CharField(max_length=5)
discounted_price = models.CharField(max_length=5)
offer_started = models.TimeField(auto_now_add=True, blank=True)
offer_expires = ?????????
在您的情况下, myButton.isEnabled = !myForm.values.filter {
if let value = $0 { return value.field > 0.0 && value.field < 2.0 }
return false
}.count > 0
函数不是合适的解决方案,因为当您需要检查数组是否包含某些特定元素时,应该使用它。但在您的情况下,您需要检查值是否在特定范围内。
可以使用contains
函数,但这种方法不正确
答案 1 :(得分:1)
是的,你可以。如果您想要在Double
范围内至少有一个0.0..<2.0
值的情况下启用此按钮,则无需致电values
。您可以直接在字典上调用contains
。 where
关键字是语法糖,使用尾随闭包语法时可以省略。
代码使用模式匹配运算符来检查范围。
myButton.isEnabled = myForm.contains { (_, value) in
guard let value = value as? Double else { return false }
return 0.0..<2.0 ~= value
}
如果要在给定范围内所有值为Double
时启用该按钮,则必须检查已反转
myButton.isEnabled = !myForm.contains { (_, value) in
guard let value = value as? Double else { return true }
return !(0.0..<2.0 ~= value)
}