IF 条件错误中的 Swift3 选项链接?

Swift3 optionals chaining in IF conditions bug?

此代码在 Swift 2.3 中运行良好,我不明白为什么我必须打开 TestClass 来检查数字是否大于 4。这就是链接可选值的全部意义所在,以节省额外的通话。

现在要完成这项工作,我必须检查是否 testClass != nil(或使用带 if let 语句的隐式解包),然后检查计数。

这真的是唯一的方法吗?

import UIKit

class testClass
{
    var optionalInt:Int?
}

var test:testClass?

if test?.optionalInt > 4
{

}

这不是错误。唉,这是故意的。比较中可选值的隐式解包 (>) 已从语言中删除。

所以,现在的问题是 > 左边的是可选的,你不能再直接将它与 4 进行比较。您必须以一种或另一种方式打开它并获得一个 Int。

首先,你在哪里初始化你的 test 变量?当然不赋值就是nil!

关于可选链接,写作有什么问题:

if let optionalInt = test?.optionalInt, optionalInt > 4
{

}

一如既往,安全 > 简洁。

从 Swift 3 中删除了可选的比较运算符。 SE-0121

你需要这样写:

if test?.optionalInt ?? 0 > 4
{

}

这也可能发生在 Guard 声明中。 示例:

var playerLevels = ["Harry": 25, "Steve": 28, "Bob": 0]

for (playerName, playerLevel) in playerLevels {

guard playerLevels > 0 else {//ERROR !!
    print("Player \(playerName) you need to do the tutorial again !")
    continue
}

print("Player \(playerName) is at Level \(playerLevels)")

}