首页 文章

将通用类型与Swift扩展中的协议一致

提问于
浏览
0

我正在尝试使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>()

    }

}

1 回答

  • 1

    使用泛型的类/ struct / enum扩展的正确语法是:

    extension Maybe : NilLiteralConvertible {    
        static func convertFromNilLiteral() -> Maybe {
            return .Nothing
        }
    }
    

    所以你不必指定泛型类型 T ,它就像你定义一个新的泛型类型一样_1502594

相关问题