【发布时间】:2015-04-28 10:22:50
【问题描述】:
我想为泛型类中使用的函数使用类型别名。该函数的参数之一使用类的泛型类型。这是一个简化的例子:
class Bar {}
// no typealias - works
class TestGeneric<T: Bar> {
let myFunc: (T) -> String
init(myFunc: (T) -> String) {
self.myFunc = myFunc
}
}
let myFunc: (Bar) -> String = {(bar: Bar) in
return "hello"
}
let test = TestGeneric<Bar>(myFunc: myFunc)
println(test.myFunc(Bar()))
// typealias - doesn't compile
class TestTypealias<T: Bar> {
typealias MyFuncGeneric = (T) -> String
let myFunc: MyFuncGeneric
init(myFunc: MyFuncGeneric) {
self.myFunc = myFunc
}
}
let myFunc2: TestTypealias.MyFuncGeneric = {(bar: Bar) in
return "hello"
}
let test2 = TestTypealias<Bar>(myFunc: myFunc2) // Error: Cannot invoke initializer for type 'TestTypealias<Bar>' with an argument list of type '(myFunc: T -> String)'
println(test2.myFunc(Bar()))
有没有办法解决这个问题?还是在使用泛型时我必须放弃 typealias?在实际代码中我有很多参数,确实需要一个类型别名...
(斯威夫特 1.2)
【问题讨论】:
标签: swift generics type-alias