首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使NSNull符合NilLiteralConvertible

使NSNull符合NilLiteralConvertible
EN

Stack Overflow用户
提问于 2014-11-08 21:17:51
回答 1查看 146关注 0票数 1

我试图使NSNullNilLiteralConvertible保持一致,但我遇到了巨大的挫折:

代码语言:javascript
复制
extension NSNull : NilLiteralConvertible{

    required convenience init(nilLiteral: ()){
        self.init()
    }
}

首先,我被迫使init成为convenience之一,因为我不能在扩展中添加指定的初始值。

然后,编译器疯狂地坚持必须使init成为required,并且在抱怨required初始化程序必须直接添加到类中而不是在扩展中之后。见鬼?!

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-26 18:22:03

不应该有理由使NSNullNilLiteralConvertible相一致。虽然该协议是公开的,但它主要由NSZone和语言选项的实现在内部使用(参见源这里中的引用)。只需将一个变量声明为Optional<NSNull>,就可以得到所需的行为。Optional枚举符合您的NilLiteralConvertible,如Optional.swift的源代码所示

这不管用:

代码语言:javascript
复制
var null: NSNull

null = NSNull()  // <null>
null = nil // error: nil cannot be assigned to type 'NSNull'

但这确实是:

代码语言:javascript
复制
var null: NSNull?

null = NSNull() // <null>
null = nil // nil
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26822192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档