我只是阅读Apple的Swift书,对隐式转换感到有些困惑。 在一个例子中有这样的:
let mynum: Float = 4
然后立即说:"值永远不会隐式转换为其他类型。"
这是怎么回事?他们只是隐含地将Int
文字转换为Float
,然后他们说价值永远不会被隐含转换?任何人都可以解释规则/例外是什么吗?
答案 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就是这样,有点像。