为什么在 Swift 中可以将数字文字解释为 NSNumber?

Why can a numeric literal be interpreted as an NSNumber in Swift?

为什么下面的一段代码在Swift中是可能的?

import Foundation
let n: NSNumber = 35.5

NSNumber 是 Foundation 模块中定义的类型,在 Swift 中未定义为本机类型。 35.5 的文字如何解释为 NSNumber 的值?

有一个名为 ExpressibleByIntegerLiteral 的协议。如果您的 class 符合该协议,它允许您使用您所展示的语法来初始化自身。还有其他协议,例如ExpressibleByStringLiteral 以一种微笑的方式工作。

NSNumber 仅符合 ExpressibleByIntegerLiteral 协议,这意味着它实现了在这种情况下使用的 init(integerLiteral value: Self.IntegerLiteralType)

NsNunber 有一个内部联合保存数据。因此,可以只分配原始类型。另见 https://www.mikeash.com/pyblog/friday-qa-2012-07-06-lets-build-nsnumber.html

NSNumber 符合 ExpressibleByBooleanLiteral, ExpressibleByFloatLiteralExpressibleByIntegerLiteral 协议,这意味着它可以 从布尔值、浮点数或整数文字初始化:

let n1: NSNumber = false
let n2: NSNumber = 12.34
let n3: NSNumber = 123