我试图使Swift泛型类型符合扩展中的协议。这是类型:
enum Maybe<T>{
case Nothing
case Something(T)
init(){
self = .Nothing
}
init(_ something: T){
self = .Something(something)
}
}
我希望它符合的协议是NilLiteralConvertible
如果我尝试扩展,我会遇到一堆疯狂的错误:
extension Maybe<T>: NilLiteralConvertible{
}
如果我在Maybe<T>
的主要定义中声明,我只能实现它。到底是什么???
enum Maybe<T>: NilLiteralConvertible{
case Nothing
case Something(T)
init(){
self = .Nothing
}
init(_ something: T){
self = .Something(something)
}
// NilLiteralConvertible
static func convertFromNilLiteral() -> Maybe<T> {
return Maybe<T>()
}
}
答案 0 :(得分:1)
使用泛型的类/结构/枚举扩展的正确语法是:
extension Maybe : NilLiteralConvertible {
static func convertFromNilLiteral() -> Maybe {
return .Nothing
}
}
因此您不必指定通用类型T
,它已在主要定义中声明。如果您指定它,就像您正在定义新的泛型类型