为什么Swift中可以使用以下代码?
import Foundation
let n: NSNumber = 35.5
NSNumber是Foundation模块中定义的类型,未在Swift中定义为本机类型。如何将35.5
的文字解释为NSNumber的值?
答案 0 :(得分:4)
NSNumber
符合ExpressibleByBooleanLiteral
,ExpressibleByFloatLiteral
和ExpressibleByIntegerLiteral
协议,这意味着它可以
从布尔,浮点或整数文字初始化:
let n1: NSNumber = false
let n2: NSNumber = 12.34
let n3: NSNumber = 123
答案 1 :(得分:0)
有一个名为ExpressibleByIntegerLiteral
的协议。如果你的类符合该协议,它允许你使用你所显示的语法来自我初始化。还有其他协议,例如ExpressibleByStringLiteral
以熟悉的方式运作。
NSNumber只符合ExpressibleByIntegerLiteral
协议,这意味着它实现了在这种情况下使用的init(integerLiteral value: Self.IntegerLiteralType)
。
答案 2 :(得分:0)
NsNunber有一个内部联盟持有数据。因此,可以仅分配原始类型。另请参阅https://www.mikeash.com/pyblog/friday-qa-2012-07-06-lets-build-nsnumber.html