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

num是一个NSNumber实例,而true是一个Boolean实例。为什么允许这样做,它是如何工作的?
我觉得它实现了某种类型的转换器,所以如果是这样的话,我该如何为我的自定义类实现任意的转换器呢?

最佳答案

NSNumber可以包含数字(int,float,…)和布尔值。
在Swift标准库中,Boolean类型实现到NSNumber的转换,您可以同样地向类中添加一个func __conversion()方法,如下所示:

class MyNumber {
    func __conversion() -> NSNumber {
        return NSNumber(float: Float.infinity)
    }
}

var i = NSNumber(int: 1)
i = MyNumber()

关于swift - 为什么我允许在Swift中将NSNumber的值设置为true/false?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25247886/

10-15 14:11