【问题标题】:Switch values in Array from 0 to 1 and back将数组中的值从 0 切换到 1 并返回
【发布时间】:2018-07-14 13:48:06
【问题描述】:

我有以下数组:

[0, 0, 1, 1, 0, 0]

在某些情况下,我必须将 0 切换为 1,反之亦然。

在 JS 中我会这样做:array[index] = !array[index],但是,在 Swift 中,这不起作用。

有没有不使用if -> else 语句的优雅方式进行此类转换?

【问题讨论】:

  • array[index] = 1 - array[index]
  • 为什么不使用Bool 的数组来代替Int 的数组?
  • Swift 的一个重要点是(与许多其他语言相反)“值永远不会隐式转换为另一种类型,” 因此整数不能被视为布尔值或反之亦然。 – 我建议至少阅读 Swift Programming Language 书籍中的 A Swift Tour

标签: swift int


【解决方案1】:

在 Swift 中,Int 不能转换为 Bool,Bool 也不能转换为 Int。这意味着您不能对 Int 执行这样的逻辑操作。我建议您编写自己的运算符,如下所示:

prefix operator !
prefix func !(value: Int) -> Int {
    return (value &+ 1) % 2
}

然后你可以写:let i = !0 // i = 1let i = !1 // i = 0

您可以使用 Bool 代替 Int,因为本机支持:let b = !true // b = falselet b = !false // b = true

【讨论】:

    【解决方案2】:

    只需使用地图:

    array = array.map{1-$0}
    

    【讨论】:

    • 请注意,OP 并没有询问如何切换所有值。
    猜你喜欢
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多