Итак, у меня есть OptionSet
:
struct Ability: OptionSet {
let rawValue: Int
static let create = Ability(rawValue: 1 << 0)
static let read = Ability(rawValue: 1 << 1)
static let update = Ability(rawValue: 1 << 2)
static let delete = Ability(rawValue: 1 << 3)
init(rawValue: Int) {
self.rawValue = rawValue
}
}
Я просто пишу один в качестве примера здесь. На самом деле мой код не знает, что именно он имеет OptionSet
, он знает только, что получает OptionSet
. То, что я хочу сделать, это иметь возможность получить имя опции из rawValue
как String
.
Итак, я хочу написать функцию со следующей сигнатурой:
func convertOptionToString<OS: OptionSet>(optionSet: OS) -> String
Где convertOptionToString(Ability.read)
вернется "read"
Конечно, я знаю, что OptionSet
s также может содержать несколько значений, но я уже знаю, как мне поступить в такой ситуации, поэтому мне не нужна помощь.
Я надеюсь, что эту проблему можно решить с помощью какого-то умного Отражения, но я пока не смог выяснить, как это сделать. Кто-нибудь хочет попробовать?