我正在寻找一种通过协议扩展为协议添加默认初始化程序的方法.
我的协议是:
protocol TestProtocol {
var myVar : Double { get set }
init(value: Double)
init(existingStruct : TestProtocol)
}
Run Code Online (Sandbox Code Playgroud)
我使用这个协议实现了一个结构:
struct TestStruct : TestProtocol {
var myVar : Double
init(value : Double) {
myVar = value
}
init (existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试通过扩展来为此协议创建默认初始化程序,我会遇到自我问题:
extension TestProtocol {
init(value : Double) {
myVar = value
}
init(existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}
Run Code Online (Sandbox Code Playgroud)
两个赋值行在初始化之前发出错误 变量'self'通过引用传递
有没有办法让这项工作 - 或者我只限于使用课程?

这对我来说有点头脑(对我来说).基本上我想要从同一个类继承2个不同的单身.在任何一个我想要使用某个本身派生的类.所以我有Utility和两个AUtil:Utility和BUtil:Utility.和Singleton被用作ASingleton使用AUtility在其胃和B分别.我在所有边界都失败了.最后的尝试是一个工厂模式,简单地将Swift 1.2送到了Segfault:
protocol Initializable { init() }
class A:Initializable {
var x = "A"
required init() {}
}
class B:Initializable {
var x = "B"
required init() {}
}
class C {
let t:Initializable
init(t:Initializable) {
self.t = t
println(t)
}
func factory() {
println(t.dynamicType())
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我也尝试将以下模式设为通用:
private let _SingletonSharedInstance = StaticClass()
class StaticClass {
class var sharedInstance : StaticClass {
return _SingletonSharedInstance
}
} …Run Code Online (Sandbox Code Playgroud)