Каково соглашение об именах для булевых методов в Swift? - PullRequest
1 голос
/ 06 апреля 2020

Предполагая, что у меня есть метод получения и метод установки для логического значения вместо свойства, потому что мне нужно передать флаг, каково будет соглашение об именах для метода установки?

например,

func isEnabled(for feature: String) {

}

func setIsEnabled(value: bool, for feature: String) { ... }

или это

func setEnabled(value: bool, for feature: String) { ... }

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Префикс 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
1 голос
/ 06 апреля 2020

Мне лично нравится функция setEnabled и передача true или false. Таким образом, у вас есть одна функция, и она отвечает за включение или отключение этой функции.

...