类名后面的 .self 是什么意思?斯威夫特 3

Ben*_*Ong 5 class self swift

我最近注意到一些代码会初始化 ClassName.self() 之类的实例,例如:

let realm = try! Realm.self()
Run Code Online (Sandbox Code Playgroud)

从输出和之后的使用来看,就像没有它一样 - Realm()

使用 .self 进行初始化是否有任何特定原因或用法?

dfr*_*fri 1

这有点猜测,但我相信在 Realm 上下文中使用的地方遵循了一个被误解的约定,该约定遵循了(一些无关紧要的)Swift 团队解决错误的效果Type.self()

Realm 团队做出了以下承诺,为上述错误的预期解决做好准备:

Type上面提交中的更改(在适当的上下文中更新为)可能Type.self激发了使用 Realm 的代码库也可以Type.self在初始化器上下文中使用,即Type.self(). 然而,这是对该后缀的多余使用.self

  • @BenOng在这种情况下,有时我们需要使用“self”后缀,例如帮助编译器区分类拥有的参数和同名的本地参数(通常用于例如初始化程序,“self.foo = foo”) 。但是,是的,在您描述的上下文中使用“self”是多余的,我认为没有理由这样做;类似的情况是使用“Realm.init()”而不是“Realm()”(“.init”确实有其用途,但在某些情况下也只是多余的)。 (2认同)