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

时间:2016-09-10 15:35:20

标签: swift swift3

这段代码在Swift 2.3中运行得很好,我不明白为什么我必须打开TestClass来检查数字是否大于4.这是链接选项的全部要点,以节省额外的调用。

现在要做到这一点,我必须检查testClass != nil(或使用if let语句隐式展开),然后检查计数。

这真的是唯一的方法吗?

import UIKit

class testClass
{
    var optionalInt:Int?
}

var test:testClass?

if test?.optionalInt > 4
{

}

4 个答案:

答案 0 :(得分:5)

这不是一个错误。唉,这是故意的。比较(>)中的选项的隐式展开已从语言中删除。

因此,现在的问题是>左侧的内容是可选内容,您无法再将其直接与4进行比较。你必须打开它并以某种方式获得Int。

答案 1 :(得分:4)

首先,您在哪里初始化test var?当然,如果你不给它一个价值,它将是零!

关于可选链接,编写的问题是什么:

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

}

一如既往,安全>简洁。

答案 2 :(得分:0)

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

你需要写这样的东西:

if test?.optionalInt ?? 0 > 4
{

}

答案 3 :(得分:0)

这也可能在Guard语句中发生。 示例:

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

对于playerLevels {

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

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

}