了解swift中的转换规则

时间:2014-12-17 05:00:06

标签: swift

我只是阅读Apple的Swift书,对隐式转换感到有些困惑。 在一个例子中有这样的:

let mynum: Float = 4

然后立即说:"值永远不会隐式转换为其他类型。"

这是怎么回事?他们只是隐含地将Int文字转换为Float,然后他们说价值永远不会被隐含转换?任何人都可以解释规则/例外是什么吗?

1 个答案:

答案 0 :(得分:3)

4不是“价值”。这是一个文字。所以它可以解释为Swift喜欢。没有什么可以“转换”;它用于创建值,但创建的值将是Float,因为这就是你要求的。

但是现在试试这个:

let i : Int = 4
let mynum: Float = i

Ooooops。

换句话说:

let mynum: Float = 4

解释

let mynum = Float(4) // we are _creating_ the value

但如果我们从i开始,必须创建值:

let i : Int = 4
let mynum: Float = Float(i)
斯威夫特不会为你做那件事。

奖励课程抓住我的啤酒,观看

struct Dog : IntegerLiteralConvertible {
    var number : Int?
    init(integerLiteral: Int) {
        self.number = integerLiteral
    }
}
let dog : Dog = 42

Float就是这样,有点像。