Префикс is
является соглашением для свойств, но не существует соглашения для пар методов получения / установки.
Вам нужны именованные индексы . Но у Свифта их нет. 100
Однако вы можете эмулировать их.
Это очень легко сделать, если ваша логика c не зависит от данных экземпляра:
struct Static {
enum isEnabled {
static subscript(for feature: String) -> Bool {
get { .random()! }
set { }
}
}
}
Static.isEnabled[for: "?"] = true
Static.isEnabled[for: "?"]
В противном случае , вам нужно использовать класс.
final class Instance {
struct IsEnabled {
fileprivate let instance: Instance
subscript(for feature: String) -> Bool? {
get { instance.dictionary[feature] }
nonmutating set { instance.dictionary[feature] = newValue }
}
}
var isEnabled: IsEnabled { .init(instance: self) }
private var dictionary: [String: Bool] = [:]
}
let instance = Instance()
instance.isEnabled[for: "?"] = true
instance.isEnabled[for: "?"] // true
let isEnabled = instance.isEnabled
isEnabled[for: "?"] // true
isEnabled[for: "?"] = false
instance.isEnabled[for: "?"] // false