我正在开发我的第一个基于Swift的项目(xcode 6.3.2),并且似乎没有一个简单的泛型构造来构建。
以下似乎无法在xcode 6.3.2(编译器退出代码为1)上编译:
// with :AnyObject constraint => compiler crash
class GenericsTest : MyDelegate{
static let instance = GenericsTest()
private init(){
var wrapper = MyWrapper<MyDelegate>(inner: self)
if let md = wrapper.inner {
println("delegate value \(md.someString)")
}
}
// MyDelegate impl
var someString = "my delegate impl"
}
protocol MyDelegate : class {
var someString : String {get set}
}
class MyWrapper<T: AnyObject>{
private (set) var inner : T?
init(inner : T){
self.inner = inner
}
}
看起来Swift编译器不喜欢MyWrapper的:AnyObject类型约束;以下代码编译并运行没有任何问题:
// no :AnyObject constraint
class GenericsTest : MyDelegate{
static let instance = GenericsTest()
private init(){
var wrapper = MyWrapper<MyDelegate>(inner: self)
if let md = wrapper.inner {
println("delegate value \(md.someString)")
}
}
// MyDelegate impl
var someString = "my delegate impl"
}
protocol MyDelegate : class {
var someString : String {get set}
}
class MyWrapper<T>{
private (set) var inner : T?
init(inner : T){
self.inner = inner
}
}
我需要:AnyObject类型约束,因为我实际上试图创建一个弱包装器,这需要这个约束,如下所示:
// with weak wrapper and obligatory :AnyObject constraint (compiler crash)
class GenericsTest : MyDelegate{
static let instance = GenericsTest()
private init(){
var wrapper = MyWrapper<MyDelegate>(inner: self)
if let md = wrapper.inner {
println("delegate value : \(md.someString)")
}
}
// MyDelegate impl
var someString = "my delegate impl"
}
protocol MyDelegate : class {
var someString : String {get set}
}
class MyWrapper<T: AnyObject>{
weak private (set) var inner : T?
init(inner : T){
self.inner = inner
}
}
任何人都知道如何解决这个问题?