我试图使NSNull与NilLiteralConvertible保持一致,但我遇到了巨大的挫折:
extension NSNull : NilLiteralConvertible{
required convenience init(nilLiteral: ()){
self.init()
}
}首先,我被迫使init成为convenience之一,因为我不能在扩展中添加指定的初始值。
然后,编译器疯狂地坚持必须使init成为required,并且在抱怨required初始化程序必须直接添加到类中而不是在扩展中之后。见鬼?!

有谁知道发生了什么事,以及如何使NSNull符合这个简单的协议?
我正在Xcode操场上测试这个。
发布于 2016-02-26 18:22:03
不应该有理由使NSNull与NilLiteralConvertible相一致。虽然该协议是公开的,但它主要由NSZone和语言选项的实现在内部使用(参见源这里中的引用)。只需将一个变量声明为Optional<NSNull>,就可以得到所需的行为。Optional枚举符合您的NilLiteralConvertible,如Optional.swift的源代码所示
这不管用:
var null: NSNull
null = NSNull() // <null>
null = nil // error: nil cannot be assigned to type 'NSNull'但这确实是:
var null: NSNull?
null = NSNull() // <null>
null = nil // nilhttps://stackoverflow.com/questions/26822192
复制相似问题