簡體   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