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
aconvency
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
您的用例是什么?