【发布时间】:2015-10-12 17:51:12
【问题描述】:
对于实例函数,强制转换工作得很好。
protocol Protocol1 {}
extension Protocol1 {
func instanceFunc() {}
static func staticFunc() {}
}
protocol Protocol2 {}
extension Protocol2 {
func instanceFunc() {}
static func staticFunc() {}
}
struct Struct: Protocol1, Protocol2 {
func instanceFunc() {
(self as Protocol1).instanceFunc()
(self as Protocol2).instanceFunc()
}
static func staticFunc() {
// My best guess. Nope!
(Struct as Protocol1.Type).staticFunc()
(Struct as Protocol2.Type).staticFunc()
}
}
【问题讨论】:
-
我知道,除了协议是否代表对象的接口,还是代表对象的某种个性,协议还有身份危机,但考虑到个性可以手动选择,例如函数,对于静态的任何东西都应该是一样的。
-
我认为您错过了 Struct 不是对象的事实,但您正试图像它一样进行投射。在预期类型名称之后,您是否收到类似构造函数调用的错误?
-
我不想像任何东西一样投射实例。我在猜测做我想做的事情的语法可能是什么。
-
我的意思是你不需要强制转换你只需调用 Protocol1.staticFunc() 和 Protocol2.staticFunc() 因为它不是一个对象,它们是附加到类的静态函数。
标签: swift swift-protocols default-implementation