我刚刚通读了 Apple 的 Swift 书籍,对隐式转换有点困惑。 在一个例子中是这样的:
let mynum: Float = 4
然后紧跟着它说:“值永远不会隐式转换为另一种类型。”
这是怎么回事?他们只是将 Int
文字隐式转换为 Float
然后他们说值永远不会被隐式转换?谁能解释这里的规则/异常(exception)是什么?
最佳答案
4
不是“值”。这是一个字面意思。所以它可以被 Swift 喜欢的任何方式解释。没有什么可以“转换”;它用于创建值,但创建的值将是一个 Float,因为这正是您所要求的。
但现在试试这个:
let i : Int = 4
let mynum: Float = i
糟糕。
换句话说:
let mynum: Float = 4
被解释为
let mynum = Float(4) // we are _creating_ the value
但如果我们从 i
开始,您必须创建值:
let i : Int = 4
let mynum: Float = Float(i)
Swift 不会为你做这些。
奖励类(class)拿着我的啤酒看这个:
struct Dog : IntegerLiteralConvertible {
var number : Int?
init(integerLiteral: Int) {
self.number = integerLiteral
}
}
let dog : Dog = 42
Float 有点像这样。
关于swift - 了解 swift 中的转换规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27518617/