【问题标题】:How do you use the Optional variable in a ternary conditional operator?如何在三元条件运算符中使用 Optional 变量?
【发布时间】:2015-01-09 00:03:02
【问题描述】:

我想在三元条件运算符中使用 Optional 变量,但它会抛出错误:optional 不能用作布尔值。我做错了什么?

var str1: String?
var myBool:Bool
myBool = str1 ? true : false

【问题讨论】:

    标签: swift ternary-operator


    【解决方案1】:

    为了补充已经非常好的答案,有时您需要三元运算符的便利性,但还需要对包装的值进行更改,例如;

    var fullName = lastName != nil ? "\(firsName) \(lasName!)" : firstName
    

    但您不想强制展开(即使这种情况也可以)。

    那么你就可以实际使用Optional.map

    var fullName = lastName.map({ "\(firstName) \($0)" }) ?? firstName
    

    仅当包装值 ($0) 不是 nil 时才调用传递给 .map 的完成块。否则,该函数只会返回 nil,然后您可以轻松地将其与 ?? 运算符合并。

    【讨论】:

      【解决方案2】:

      Ternary operators 对三个目标进行操作。和 C 一样,Swift 只有一个 三元运算符,三元条件运算符(a ? b : c)。

      tableView 上的使用示例 -

      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
           return section == 2 ?  4 :  1
      }
      

      表示如果section等于2,则返回4,否则返回1。

      【讨论】:

      • 这个答案并没有解决 OP 对 Optionals 的具体要求
      【解决方案3】:

      如果比较基于某些条件

       let sliderValue = Float(self.preferenceData.getLocationRadius().characters.count > 1 ?self.preferenceData.getLocationRadius():"0.1")
      

      这里的函数 getLocationRadius() 返回一个字符串。如果我们不在 1 和 ?它会导致语法错误

      【讨论】:

        【解决方案4】:

        如果你想要的值是一个属性或函数调用的结果,这甚至很有效(在 Swift 3.0 中):

        return peripheral?.connected ?? false
        

        【讨论】:

        • 这不是在回答同一个问题,因为您假设我们想要该值 - 如果它存在,否则为零。虽然我们想要两个不同的表达式 - 基于任意条件。类似 a>3 的东西? (4+7) : (6/4) 在 C 中。
        【解决方案5】:

        您不能将字符串值分配给 bool,但您可以检查它 str1 是否为 nil:

        myBool = str1 != nil ? true : false
        print(myBool)
        

        因为 str1 为空,所以会打印 false。

        【讨论】:

        • 你不需要条件表达式,只需:myBool = str1 != nil
        【解决方案6】:

        Nil Coalescing Operator 也可以使用。 下面的代码使用三元条件运算符和强制展开 (a!) 在 a 不为 nil 时访问包裹在 a 中的值,否则返回 b

        普通三元运算符:

        output = a != nil ? a! : b Apple Developer Link:请参考Demo Link

        在 Swift 1.2 和 2 中,上面的代码行被替换为更短的格式:

        output = a ?? b
        

        Demo Link : nil 合并运算符 (a ?? b) 如果可选 a 包含值,则解包它,如果 a 为 nil,则返回默认值 b。

        【讨论】:

          猜你喜欢
          • 2010-09-28
          • 1970-01-01
          • 2021-07-03
          • 1970-01-01
          • 2022-07-18
          相关资源
          最近更新 更多