鉴于这种代码:如何从通用函数调用Swift协议的静态属性?
public protocol Selectable {
typealias T
var selected: Bool { get }
static var defaultValue: T { get }
}
public func selected<T: Selectable>(items: [T]) -> T {
if let selected = items.filter({$0.selected}).first {
return selected
}
return T.defaultValue
}
我上回行的错误:“无法将类型的返回表达式‘T.T’预期收益型‘T’”。
更改为return T.defaultValue as! T
似乎工作,但这对我没有任何意义。我错过了什么,或者我应该提交一个雷达?
啊,因为泛型函数的声明不知道T是什么(根本不是在编译时,或者至少不是在编译时),但协议呢?或类似的东西? – 2015-04-02 14:39:32
是的,在你的代码中'selected'函数不知道'typealias T'的实际类型是什么。 'selected'函数中的'T'和'Selectable'中的'T'不相关。 – rintaro 2015-04-02 14:51:51