是否可以将self设置为静态方法的默认参数?例如
enum Foo {
static func processSomething(forOwner owner: Any = self) -> Bar {
...
}
// or
static func processSomething(forOwner owner: Any = Caller.self) -> Bar {
...
}
}
我找到了这个SO post,但是问题是关于实例方法的,我认为对于静态/类方法来说可能是可行的,因为可能有所不同。
这是为了简化代码,例如
class Baz {
var bar: Bar?
func triggerSomething() {
// automatically infer self instead of me explicitly placing it here
// so the code will be this
self.bar = Foo.processSomething()
// instead of this
self.bar = Foo.processSomething(forOwner: self)
}
}
编辑:我实际上只是出于好奇而问。我没有用例,并且可能不会在现实世界中使用它。
答案 0 :(得分:2)
self
作为实例的引用不适用于static
函数,因此就该特定方式而言,问题的答案为“否”。但是,在为自己节省一些输入的情况下,并通过一个名为triggerSomething()
(其中有self
的实例方法),可以完成您想要做的事情。
这个答案纯粹是为了解决如何。我应该坦白地说,我认为其中没有太多实用程序,如果您发现自己需要这样的模式,最好花更多的时间在设计上。但是,不管怎么说,这是什么样子。
请注意,为简单起见,我将返回一个Int
,其中您有Bar
的问题。
protocol Processable { }
class Foo: Processable {
static func processSomething(forOwner owner: Processable) -> Int {
return 1
}
func triggerSomething(forOwner owner: Processable? = nil) -> Int {
return Foo.processSomething(forOwner: owner ?? self)
}
}
答案 1 :(得分:1)
不。对于静态函数,它不能使用“自我”。
我不明白您为什么需要它;您可以删除该参数,并根据需要调用self.processSomething或other.processSomething。也许您应该解释一下为什么您认为这对您的情况有用,并考虑是否有意义。