繁体   English   中英

在Swift扩展中将通用类型与协议兼容

[英]Conforming a generic type to a protocol in a Swift extension

我试图使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>()

    }

}

使用泛型扩展类/结构/枚举的正确语法是:

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

因此您不必指定泛型T ,它已经在主定义中声明了。 如果指定它,就好像您正在定义一个新的泛型类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM