【发布时间】:2016-11-28 21:14:42
【问题描述】:
Objective-C 有一种特殊但非常有用的能力,它可以使初始化程序返回与调用初始化程序的实例不同的实例。你可以阅读here。
这对于类集群之类的东西非常有用,但即使对于确保根据特定条件返回特定实例这样简单的事情(即,使用帐号新建一个 Account 类将始终返回相同的 Account 类实例)号。)
但是,在我们的应用程序中,我们使用的是 Swift,但我没有看到这种语言中的任何此类规定。有这种事吗?
通常我们会简单地创建一个类方法来返回我们感兴趣的实例,但是虽然我们拥有所讨论的类,但我们并不拥有使用标准初始化程序语法的调用代码。例如
let foo = OurClass()
我们希望根据一些外部条件来控制将哪个实例交还给他们(为清楚起见,此处省略。)
那么 Swift 有这样的机制吗?
【问题讨论】:
-
目前这在 Swift 中是不可能的,如果你正在寻找的话,你不能在 init 方法中创建和返回一个(子类)实例。 - 我认为这已经在swift-evolution上讨论过,但我不知道目前的状态。
-
不,这不是我们正在做的。我们只是返回一个不同的类实例(但类型相同),因为它是针对一个 init 调用的。我在想解决方案是深入到Objective-C然后桥回到swift。会给我们想要的东西,尽管是以左三右右的方式。
-
这是我想到的一个主题:lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/…。 - 目前你不能返回不同的实例(据我所知),子类与否。
-
也许类级别的工厂方法比
init方法更适合这种情况。 -
我同意,但正如我在问题中指出的那样,我们无法控制它的使用位置。我们只是试图阻止它更新和返回重复项,Apple 在我提供的链接中的文档中谈到的确切情况。
标签: swift initializer