为什么这需要执行if语句

时间:2014-06-08 18:00:34

标签: enums swift swift-playground

在Apple的快速书中,有一个枚举的例子。它允许您将原始Int转换为枚举等级。但是,当我尝试删除if语句时,代码给了我

  

游乐场执行失败:错误:: 30:13:错误:'排名?'没有名为' simpleDesciption'

的成员
enum Rank: Int {
    case Ace = 1
    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
    case Jack, Queen, King

    func simpleDesciption() -> String {
        switch self {
            case .Ace:
                return "ace"
            case .Jack:
                return "jack"
            case .Queen:
                return "queen"
            case .King:
                return "king"
            default:
                return String(self.toRaw())
        }
    }
}

if let convertedRank = Rank.fromRaw(1){
    let threeDescription = convertedRank.simpleDesciption()
}

// Why does it need to be wrapped in a if statement?

let convertedRank = Rank.fromRaw(1)
let threeDescription = convertedRank.simpleDesciption()

1 个答案:

答案 0 :(得分:2)

if let构造允许解包可选类型。 Rank.fromRaw会返回Rank?可选类型,这意味着它可以是nil或类型的实际值。

有两种方法可以在Swift中解包可选类型的值,其中一种是if let构造。如果可选类型不是if let,则执行nil的主体,并且if let后面的变量绑定到其值(因此具有类型Rank,而不是Rank?)。

请注意,如果您只是在没有let convertedRank = Rank.fromRaw(1)的情况下撰写ifconvertedRank的类型为Rank?,并且再次无法直接用作Rank没有被打开。

如果您 确定 该值永远不会是nil,您可以通过在!后缀变量名来强制解包它:

let convertedRank = Rank.fromRaw(1)
convertedRank!.simpleDescription()

但这不是推荐的样式,因为如果未定义值,它将在运行时失败。