协议类型的调用方法
我已经搜索了相当多的地方并在操场上玩过,但是我没有成功,所以我在这里问: 任何方法都要使变量包含非@objc
协议元类型,然后调用类/从它的静态方法?协议类型的调用方法
例如为:
protocol MyProtocol {
class func myFunc() -> Int
}
enum MyEnum: Int, MyProtocol {
case A
case B
static func myFunc() -> Int { return A.rawValue }
}
let foo: MyProtocol.Type = MyEnum.self
let bar = foo.myFunc()
附:它说最后一次调用是未实现,所以我应该期待它在未来的Swift版本中?
类方法只允许在类和协议中使用;枚举既不是。
类方法是Swift“类型方法”的一种类型;另一种类型是静态方法,这是你在枚举中声明的。类和静态方法是不同的。
请参阅the Swift methods docs了解几种不同的模式和示例。
p.s.它说上次调用未实现,那么我应该在未来的Swift版本中期待它吗?
是。
我不明白。 'MyEnum'符合'MyProtocol'(否则它将是一个不同的编译错误),这意味着可以在类型对象上调用'myFunc'。以及如何在枚举类型上实现类方法? –
_unimplemented_消息意味着Swift不实现此功能_not_方法未在该类型中实现。 –
@BryanChen(1)如果在枚举中将'static'更改为'class',将会看到显式错误。 (2)你是对的;我误解了错误。我已经更新了我的答案。 –
更新的版本夫特2.0及以上
夫特2.0+允许方法将被声明为在协议定义静态的。这些必须满足实现协议的对象中的静态/类方法。
您无法使用静态方法满足实例方法的协议定义,反之亦然,这使得上述问题不完整。
如果您想尝试这只是使用关键字“静态”在协议定义的方法,你会实现你的符合对象为静态或类方法:
protocol InstanceVsStatic {
func someInstanceFunc()
static func someStaticFunc()
}
enum MyConformingEnum: InstanceVsStatic {
case someCase
static func someStaticFunc() {
// code
}
func someInstanceFunc() {
// code
}
}
class MyConformingClass: InstanceVsStatic {
class func someStaticFunc() {
// code
}
func someInstanceFunc() {
// code
}
}
struct MyConformingStruct: InstanceVsStatic {
static func someStaticFunc() {
// code
}
func someInstanceFunc() {
// code
}
}
你可以有一个实例方法调用静态/类方法:
这使您可以在需要符合需要实例方法的协议时执行静态代码。
struct MyConformingStruct: InstanceVsStatic {
static func doStuffStatically(){
// code
}
static func someStaticFunc() {
// code
}
func someInstanceFunc() {
MyConformingStruct.doStuffStatically()
}
}
夫特1.2
比如上述间接其他,也没有办法来使用静态(类)方法以符合协议在1.2和低于纯迅速版本。这是一个已知的bug /未实现的功能:https://openradar.appspot.com/20119848
它现在在swift中实现2.0+ –
[使swift类符合协议 - 在静态/类级别](http://*.com/questions/ 29711935/make-swift-class-conform-to-protocol-at-static-class-level) –