为什么允许我在Swift中将NSNumber的值设置为true/false?

为什么允许我在Swift中将NSNumber的值设置为true/false?,swift,Swift,num是一个NSNumber实例,而true是一个Boolean实例。为什么允许这样做?它是如何工作的 我有一种感觉,它实现了某种转换器,因此如果是这样,我将如何为我的自定义类实现任意转换器?这里的主要原因是您使用的是一个目标C类NSNumber 这里的init被映射到它的类方法,在本例中使用bool将其映射到目标C中bool是一个字符,带有@defines for tee和false,因此Swift false被映射到0,true被映射到1。这里的主要原因是您使用的是目标C类NSNumber

num
是一个
NSNumber
实例,而
true
是一个
Boolean
实例。为什么允许这样做?它是如何工作的


我有一种感觉,它实现了某种转换器,因此如果是这样,我将如何为我的自定义类实现任意转换器?

这里的主要原因是您使用的是一个目标C类NSNumber


这里的init被映射到它的类方法,在本例中使用bool将其映射到目标C中bool是一个字符,带有@defines for tee和false,因此Swift false被映射到0,true被映射到1。这里的主要原因是您使用的是目标C类NSNumber


这里的init被映射到它的类方法,在这种情况下使用bool将它映射到目标C中bool是一个字符,带有@defines for tee和false,因此Swift false被映射到0,true被映射到1

在Swift标准库中,
Boolean
类型实现到
NSNumber
的转换,您可以在类中添加
func\uu conversion()
方法,如下所示:

var num = NSNumber(bool: false)
num = true
println(num) // "1"

NSNumber
可以同时包含数字(int、float等)和布尔值

在Swift标准库中,
Boolean
类型实现到
NSNumber
的转换,您可以在类中添加
func\uu conversion()
方法,如下所示:

var num = NSNumber(bool: false)
num = true
println(num) // "1"
true
是一个
Boolean
实例

不一定。它可以是符合
BooleanLiteralConverable
协议的任何类型
NSNumber
确实符合此协议(以及
IntegerLiteralConvertible
FloatLiteralConvertible

true
是一个
Boolean
实例


不一定。它可以是符合
BooleanLiteralConverable
协议的任何类型
NSNumber
确实符合此协议(以及
IntegerLiteralConvertible
FloatLiteralConvertible
)。

由于@pNre的答案中概述的转换,您的第一行也可以是
var num:NSNumber=false
var num=false作为NSNumber
。当您将Swift基本数据类型放入
NSDictionary
s时,后一种形式特别方便。由于@pNre的答案中列出的转换,您的第一行也可以是
var num:NSNumber=false
var num=false作为NSNumber
。当您将Swift基本数据类型放入
NSDictionary
s时,后一种形式尤其方便。