为什么在Swift中可能有以下代码片段?为什么数字文字可以解释为Swift中的NSNumber?
import Foundation
let n: NSNumber = 35.5
NSNumber是在Foundation模块中定义的类型,在Swift中没有定义为本机类型。如何将35.5
的字面解释为NSNumber的值?
为什么在Swift中可能有以下代码片段?为什么数字文字可以解释为Swift中的NSNumber?
import Foundation
let n: NSNumber = 35.5
NSNumber是在Foundation模块中定义的类型,在Swift中没有定义为本机类型。如何将35.5
的字面解释为NSNumber的值?
NSNumber
符合ExpressibleByBooleanLiteral
,ExpressibleByFloatLiteral
和ExpressibleByIntegerLiteral
协议,这意味着它可以是 从一个布尔初始化,浮点,或整数字面:
let n1: NSNumber = false
let n2: NSNumber = 12.34
let n3: NSNumber = 123
有一个名为ExpressibleByIntegerLiteral
的协议。如果你的类符合该协议,它允许你使用类似你所示的语法来初始化自己。还有另外的协议,比如ExpressibleByStringLiteral
工作在一个熟悉的方式。
NSNumber只是符合ExpressibleByIntegerLiteral
协议,这意味着它实现了init(integerLiteral value: Self.IntegerLiteralType)
在这种情况下使用。
NsNunber拥有一个内部联盟来保存数据。这样的原始类型可以被分配。还参见https://www.mikeash.com/pyblog/friday-qa-2012-07-06-lets-build-nsnumber.html