Cocoa 使NSNull符合nilliteral

Cocoa 使NSNull符合nilliteral,cocoa,swift,protocols,swift-playground,nsnull,Cocoa,Swift,Protocols,Swift Playground,Nsnull,我试图使NSNull符合nilliteravergable,但我遇到了巨大的挫折: extension NSNull : NilLiteralConvertible{ required convenience init(nilLiteral: ()){ self.init() } } 首先,我不得不将initaconvencya,因为我不能在扩展中添加指定的初始值设定项 然后,编译器发疯了,坚持init必须是required,并在抱怨required初始化器必

我试图使
NSNull
符合
nilliteravergable
,但我遇到了巨大的挫折:

extension NSNull : NilLiteralConvertible{

    required convenience init(nilLiteral: ()){
        self.init()
    }
}
首先,我不得不将
init
a
convency
a,因为我不能在扩展中添加指定的初始值设定项

然后,编译器发疯了,坚持init必须是
required
,并在抱怨
required
初始化器必须直接添加到类中,而不是在扩展中。WTF

有人知道发生了什么,以及如何使
NSNull
符合这个简单的协议吗


我正在Xcode操场上测试这个问题。

应该没有理由将
NSNull
符合
nilliteravergable
。尽管该协议是公开的,但它主要由
NSZone
和Optionals在语言中的实现在内部使用(参见源代码中的参考资料)。只需将变量声明为
可选
,即可获得所需的行为。
可选
枚举符合您的
NilLiteralConvertible
,如源代码所示:

这不起作用:

var null: NSNull

null = NSNull()  // <null>
null = nil // error: nil cannot be assigned to type 'NSNull'
var null:NSNull
null=NSNull()//
null=nil//错误:无法将nil分配给类型“NSNull”
但这确实:

var null: NSNull?

null = NSNull() // <null>
null = nil // nil
var null:NSNull?
null=NSNull()//
null=nil//nil

您的用例是什么?