++ post-增量运算符的替代方案?

Alternatives to the ++ post-increment operator?

我想在不使用 Swift 中的遗留 ++ 的情况下重构此合并排序。

当使用实例方法和多个级别在更复杂的语句中使用一元运算符时,我在逻辑上遇到了麻烦。

您不能简单地将 ++ 切换为 +=1,因为您会收到 Cannot subscript a value of type '[Int]' with an index of type '()' 错误。

那么我应该创建一个新的可变副本变量然后递增该变量吗?即使没有错误检查,我也可以使用 guard 重构这个块吗?毫无意义?

if (hidariCount < hidari.count && (migiCount >= migi.count || hidari[hidariCount] <= migi[migiCount])) {
    sortedArray.append(hidari[hidariCount++])
} else if (migiCount < migi.count && (hidariCount >= hidari.count || migi[migiCount] < hidari[hidariCount])) {
    sortedArray.append(migi[migiCount++])
}

post-增量运算符有什么作用?

此代码

hidari[hidariCount++]

按以下顺序做 2 件事:

  1. hidariCount当前值 用于 访问hidary 数组
  2. hidariCount 增加 1

解决方案

所以你可以通过替换这个来重构你的代码

sortedArray.append(hidari[hidariCount++])

有了这个

sortedArray.append(hidari[hidariCount])
hidariCount += 1

并且不要忘记在 else 分支中执行相同的操作。

如果你真的很想念它们,你可以简单地在

中重新定义它们
postfix operator ++ // i++
postfix func ++ ( left: inout Int) -> Int {
   defer {left += 1}
   return left
}
postfix operator -- // i--
postfix func -- ( left: inout Int) -> Int {
   defer {left -= 1}
   return left
}
prefix operator ++ // ++i
prefix func ++ ( right: inout Int) -> Int {
   right += 1
   return right
}
prefix operator -- // --i
prefix func -- ( right: inout Int) -> Int {
   right -= 1
   return right
}

虽然这不是真正可取的!