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

Time:09-26

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

CodePudding user response:

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"
  • Related