简体   繁体   中英

Create a protocol with default implementation that gives name/title/self of Enum as string

I am trying to create a protocol with default implementation that returns enum itself as string. But not able to find the correct syntax.

This is the code I tried so far, but it is not taking default implementation

    protocol TestSelf {
        static var desc: String { get set }
    }
    
    extension TestSelf {
        get {
            static var desc: String {
                   String(describing: self)
        }
        set {
            print(\(new value))
        }
    }

    enum Test: TestSelf { }

Access

    print(Test.desc)

Asking me to implement the desc in the enum saying 'static var' declaration requires an initializer expression or an explicitly stated getter. I don't want to initialize it again. It should work with Default Implementation.

Ask: At all places I don't need to write String(describing: Test.self) instead I can directly use Test.desc

I think you want something like this (this is playground code):

protocol SelfDescriber {
    static var descriptionOfSelf: String {get}
}
extension SelfDescriber {
    static var descriptionOfSelf: String {
        String(describing: Self.self)
    }
}

enum Test: SelfDescriber {}
print(Test.descriptionOfSelf) // "Test"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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