为什么在 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
, ExpressibleByFloatLiteral
和 ExpressibleByIntegerLiteral
协议,这意味着它可以
从布尔值、浮点数或整数文字初始化:
let n1: NSNumber = false
let n2: NSNumber = 12.34
let n3: NSNumber = 123
为什么下面的一段代码在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
, ExpressibleByFloatLiteral
和 ExpressibleByIntegerLiteral
协议,这意味着它可以
从布尔值、浮点数或整数文字初始化:
let n1: NSNumber = false
let n2: NSNumber = 12.34
let n3: NSNumber = 123