Swift-三元条件运算符的误解

时间:2018-07-31 10:32:18

标签: ios swift ternary-operator

我在使用Swift 4.1中的三元条件运算符了解某些内容时遇到了问题。我希望有人可以向我解释:)

我正在使用Apollo库。 该库向我展示了一个具有此字段的对象(编辑):

public var discount: Swift.Optional<Bool?> {
    get {
      return graphQLMap["discount"] as! Swift.Optional<Bool?>
    }
    set {
      graphQLMap.updateValue(newValue, forKey: "discount")
    }
}

在我的课堂上,我试图将此值设置为truenil(如果值为false,则应返回nil以返回所有结果)

尝试#1:

func setGoodDeals(_ goodDeals: Bool) {
    filters.discount = goodDeals ? goodDeals : nil;
}

这不起作用;我的应用因以下错误而崩溃:

  

无法转换类型为“ Swift.Optional”的值   (0x10a9fa298)更改为“ Swift.Bool”(0x10a9cddf8)。

尝试#2:

if ( goodDeals ) {
    filters.discount = goodDeals;
} else {
    filters.discount = nil;
}

这有效。

尝试#3:

func setGoodDeals(_ goodDeals: Bool) {
    filters.discount = goodDeals ? true : nil;
}

这有效。

有人可以向我解释为什么吗?

提前,

0 个答案:

没有答案