可以在Swift中为方法指定self吗?

时间:2017-01-03 12:45:02

标签: swift oop

如果您有多个兼容对象:

self

而且,让我们说,你想在一个案例中调用一个超级方法,而在另一个案例中调用另一个超级方法,是否可以通过{{1}明确地作为参数?

这个问题是由Xcode中的以下提示引起的。 Xcode suggests methods when you type dot after a class name

这个建议到底意味着什么?

2 个答案:

答案 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()。您还必须定义一个单独的实例方法。