是否有必要在协议上声明静态函数?无论如何,使用该协议的客户端必须在符合该协议的类型上调用该函数,对吗?这打破了不必知道符合协议IMO的类型的想法。有没有一种方法可以在我不必知道符合协议实际类型的方式下调用协议上的静态函数?
好问题。这是我的拙见:
与在协议中声明实例方法几乎相同。
是的,与实例函数完全一样。
不。看下面的代码:
protocol Feline {
var name: String { get }
static func createRandomFeline() -> Feline
init()
}
extension Feline {
static func createRandomFeline() -> Feline {
return arc4random_uniform(2) > 0 ? Tiger() : Leopard()
}
}
class Tiger: Feline {
let name = "Tiger"
required init() {}
}
class Leopard: Feline {
let name = "Leopard"
required init() {}
}
let feline: Feline = arc4random_uniform(2) > 0 ? Tiger() : Leopard()
let anotherFeline = feline.dynamicType.createRandomFeline()
我不知道变量中的真实类型feline
。我只知道它确实符合Feline
。但是,我正在调用静态协议方法。
我知道,您想调用协议中声明的静态方法/函数,而无需创建符合协议的值。
像这样:
Feline.createRandomFeline() // DANGER: compiler is not happy now
老实说,我不知道为什么这不可能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句