首页 > 解决方案 > Swift - 三元条件运算符的误解

问题描述

我在理解 Swift 4.1 中的三元条件运算符时遇到问题。我希望有人可以向我解释:)

我正在使用阿波罗图书馆。这个库向我展示了一个带有这个字段的对象(编辑):

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

在我的课堂上,我试图将此值设置为trueor nil(如果值为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;
}

这行得通。

谁能向我解释为什么?

提前谢谢,

标签: iosswiftternary-operator

解决方案


很简单。它是这样工作的。

假设我们必须基于 bool 'isNewUser' 传递字符串。

yourLable.text = isNewUser ?“你能得到”:“你得到”

如果 'isNewUser' 为真,那么它将传递“你可以得到”,否则它将传递“你得到”。

我希望它很清楚。


推荐阅读