【问题标题】:Understanding the rules for conversion in swift快速理解转换规则
【发布时间】:2014-12-17 05:00:06
【问题描述】:

我正在阅读 Apple 的 Swift 书籍,对隐式转换有点困惑。 举一个例子:

let mynum: Float = 4

然后紧接着它说:“值永远不会隐式转换为另一种类型。”

这是怎么回事?他们只是将Int 文字隐式转换为Float,然后他们说值永远不会被隐式转换?谁能解释这里的规则/例外是什么?

【问题讨论】:

标签: swift


【解决方案1】:

4 不是“值”。它是一个字面意思。所以它可以被解释为 Swift 喜欢的任何东西。没有什么可以“转换”的;它用于创建值,但创建的值将是一个浮点数,因为那是你所要求的。

但现在试试这个:

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 不会为你这样做。

BONUS LESSON拿着我的啤酒看这个

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

Float 有点像这样。

【讨论】:

  • 所以只有变量/常量被认为是“值”的?文字的规则是什么(是否在某处记录)?
  • 嗯,嗯,这都是关于IntegerLiteralConvertible 协议的。我不认为你真的想去那里......
  • 如果你真的很好奇,请查看 Swift 标头,其中 Float 被扩展为采用 IntegerLiteralConvertible。这意味着您可以在需要 Float 的地方提供一个整数文字,并且将调用一个特殊的对应 init
  • 啊哈,如果我对发生的事情没有一些了解,那会打扰我,我会查一下。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 2013-04-10
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多