如何定义一个包含枚举的协议,它包含自己定义的值,其中一个存储为属性?

bog*_*gen 1 enums protocols swift

protocol TrackableAction {

    var identifier: String { get }

}

struct ServerAction: TrackableAction {

    let identifier = "Server"

    enum Label: String {

        case NotImplemented = "Feature not implemented"
        case NotPlanned = "Feature is not planned in this version"

    }

   var label: Label

}

struct ClientAction: TrackableAction {

    let identifier = "Client"

    enum Label: String {

        case NoneExisting = "Does not exist"
        case CannotFindRoot = "The root was unknown"

    }

   var label: Label

}
Run Code Online (Sandbox Code Playgroud)

用法:

ServerAction(label: .NotImplemented)
ClientAction(label: .NoneExisting)
Run Code Online (Sandbox Code Playgroud)

是否可以扩展TrackableAction以包含重复的枚举和标签定义?

我希望这能够将该类型的对象发送到函数

func log(trackableAction: TrackableAction) {
    // sends strings to a log service
    print(trackableAction.label) // ERROR

}
Run Code Online (Sandbox Code Playgroud)

use*_*383 6

protocol TrackableAction {

    var identifier: String { get }
    var label: Label {get set}
    associatedtype Label: RawRepresentable
}

struct ServerAction: TrackableAction {

  let identifier = "Server"

  enum Label: String {

    case NotImplemented = "Feature not implemented"
    case NotPlanned = "Feature is not planned in this version"

  }

  var label: Label = Label.NotImplemented

}

func log<T: TrackableAction>(trackableAction: T) {
  // sends strings to a log service
  print(trackableAction.label) // ERROR
}
Run Code Online (Sandbox Code Playgroud)