在Swift中,类型注释可以使整数变成双精度
let num: Double = 100
print(num)
为什么对于双精度整数到整数类型的注释不一样(错误,无法将类型为“ Double”的值转换为指定的类型“ Int”)?
let num: Int = 100.0
print(num)
答案 0 :(得分:6)
将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
的函数,而编译器没有抱怨。