Оператор переключения регистра - Общий связанный тип - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь связать универсальный тип с оператором регистра переключателя, но получаю ошибку времени компиляции.

enum TextEditEvent{
case editingBegin(UITextField)
case editingEnd(UITextField, UITextField?)
case textChanged<T>(String?, UILabel?, T, String) where T:Object, T:Updatable
}

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 26 мая 2018

Сам enum должен быть объявлен как generic, а не как регистр, и вы не можете использовать выражение where в объявлении case, вам нужно указать ограничения универсального типа для связанного значения.

enum TextEditEvent<T>{
    case editingBegin(UITextField)
    case editingEnd(UITextField, UITextField?)
    case textChanged(String?, UILabel?, T:Object, Updateable, String)
}

Или, если вы хотите, чтобы T имел эти ограничения типов в целом enum, а не только для случая textChanged, вы можете объявить enum следующим образом:

enum TextEditEvent<T: Object, Updateable>{
    case editingBegin(UITextField)
    case editingEnd(UITextField, UITextField?)
    case textChanged(String?, UILabel?, T, String)
}
...