我在下面编写代码,我想知道为什么我需要额外的.00
内容70_000.00
。我知道如果我不需要,它将被视为一个整数。
protocol Building {
var rooms: Int { get }
var price: Double { get }
var retailer: String { get }
}
struct House: Building {
var rooms = 4
var price = 70_000.00
var retailer = "John Doe"
}
我认为 Swift 可以在这种时候推断数据类型,尤其是当我已经告诉 Swift“Price”是双精度数时。
来自文档:
换句话说,对于变量声明,类型推断仅限于赋值右侧的内容。即使赋值周围的上下文会导致它推断出不同的类型,情况也是如此。例如:
Swift 永远不会推断出 的类型
a
,Double
因为赋值的右边是一个整数字面量——在这种情况下,它会决定最合适的类型是Int
;赋值之前或之后的行根本不会出现。这对于 也是一样的
var price
:如果你分配一个整数文字,Swift 将推断出 的类型Int
;而分配一个浮点文字将使其决定哪个Double
是最合适的类型,这将恰好符合你试图满足的协议要求。或者,给出var price
一个显式类型将允许你分配一个整数文字:var price: Double = 70_000
。由于可能出现意外的类型推断,一些风格指南建议始终给予实例变量明确的类型,以非常清楚地表明预期的类型应该是什么。