【发布时间】:2018-12-20 03:18:14
【问题描述】:
在 Swift 中,类型注释可以使整数成为双精度数
let num: Double = 100
print(num)
为什么类型注解对双精度整数的作用不同(错误无法将类型“双”的值转换为指定类型“整数”)?
let num: Int = 100.0
print(num)
【问题讨论】:
标签: swift
在 Swift 中,类型注释可以使整数成为双精度数
let num: Double = 100
print(num)
为什么类型注解对双精度整数的作用不同(错误无法将类型“双”的值转换为指定类型“整数”)?
let num: Int = 100.0
print(num)
【问题讨论】:
标签: swift
将 Int 文字转换为 Double 仅因为 Double 符合 ExpressibleByIntegerLiteral:
标准库整数和浮点类型,例如 Int 和 Double,符合 ExpressibleByIntegerLiteral 协议。您可以通过分配一个整数文字来初始化这些类型的变量或常量。
要使第二个代码起作用,Int 必须符合 ExpressibleByFloatLiteral。
extension Int : ExpressibleByFloatLiteral {
public typealias FloatLiteralType = Double
public init(floatLiteral value: Int.FloatLiteralType) {
self.init(value)
}
}
let a: Int = 100.0 // works
不过,我并不特别推荐这样做。这可能会导致您不小心将双精度值传递给期望 Int 的函数,而编译器不会抱怨。
【讨论】: