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

时间:2017-04-17 21:01:47

标签: swift nsnumber

为什么Swift中可以使用以下代码?

import Foundation
let n: NSNumber = 35.5

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

3 个答案:

答案 0 :(得分:4)

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

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