如果您有多个兼容对象:
self
而且,让我们说,你想在一个案例中调用一个超级方法,而在另一个案例中调用另一个超级方法,是否可以通过{{1}明确地作为参数?
这个建议到底意味着什么?
答案 0 :(得分:4)
@ Sulthan的回答正确地说明了如何将self
传递给超类函数。我只是想解释一下XCode建议的内容。
如果仔细观察(或尝试一下),你会发现以建议的方式调用该函数实际上并不会调用而是返回它。
由于f
是一个实例方法,因此只能在实例上调用它。如果您致电X.f(...)
,则必须传递X
的实例才能在该实例上调用f
。
例如,如果你有:
class X {
var description: String
init(desc: String) {
description = desc
}
func f() {
print(description)
}
}
然后你说
var function = X.f(X(desc: "A specific description")) // passing an instance of X
然后你可以用
调用这个函数function()
你会看到
A specific description
或者你也可以立即调用函数:
X.f(X(desc: "A specific description"))()
或者:
X(desc: "A specific description").f()
答案 1 :(得分:1)
如果您使用 static dispatch
,这是完全可能的class Animal {
static func walk(_ animal: Animal) {
...
}
}
class Mammal : Animal {
static func walk(_ mammal: Mammal) {
...
}
}
然而,从架构的角度来看,这是非常奇怪的。它打破了多态性。
请注意,您将无法再在实例上调用animal.walk()
。您还必须定义一个单独的实例方法。