为什么允许我在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时,后一种形式尤其方便。