Создание переменной, свойство которой должно удовлетворять ограничению - PullRequest
0 голосов
/ 09 июля 2020

У меня есть перечисление: MyEnum.

enum MyEnum {
  case One
  case Two
}

Затем у меня есть класс, который имеет свойство типа MyEnum.

class MyClass {
  var myEnum: MyEnum

  init(myEnum: MyEnum) {
    self.myEnum = myEnum
  }
}

Теперь у меня есть переменная типа MyClass, свойство MyEnum которого должно быть One. Это та часть, которую я не знаю, как это сделать.

var myVar: MyClass where { self.myEnum == .One } = MyClass(myEnum: .One) // doesn't work

Следующее не должно работать так же, как var myInt: Int = "Hello World" не работает.

var myVar: MyClass where { self.myEnum == .One } = MyClass(myEnum: .Two)

1 Ответ

0 голосов
/ 12 июля 2020

Шаг первый: Думаю, нам нужно будет использовать assert

var myVar: MyClass = MyClass(.One); assert(myVar.myEnum == .One)

Шаг 2: Мне очень нравится willSet

var myVar: Int? {
    willSet(to) { assert(to == 0) }
}
myVar = 0 // good
myVar = 1 // breaks

Шаг 3: Примените его к вашему классу:

enum MyEnum {
    case One, Two
}
class MyClass {
    var mustBe: [MyEnum]
    var myEnum: MyEnum {
        willSet(to) { assert(mustBe.contains(to)) }
    }

    init(_ myEnum: MyEnum,_ mustBe: [MyEnum]) {
        self.myEnum = myEnum
        self.mustBe = mustBe
        assert(mustBe.contains(myEnum))
    }
}

var myVar = MyClass(.One, [.One]) // good
myVar.myEnum = .One // good
myVar.myEnum = .Two // breaks
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...