Как создать тип данных с ограниченным набором возможностей для переключения на его значение? - PullRequest
1 голос
/ 10 мая 2019

Я хотел бы передать значение в функцию, которая позволяет мне выбрать, какое значение установить из списка установок. Примером использования этого может быть функция, которая должна вести себя по-разному в зависимости от «режима», в котором находится страница, например, создание нового сообщения или редактирование существующего. В настоящее время я делаю это, передавая строковый параметр в функцию с «новым» или «редактировать» в строке. Я думал, что правильный способ сделать это - создать перечисление, чтобы передаваемое значение соответствовало типу перечисления, и мне не нужно беспокоиться о том, что опечатка сломает приложение.

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

// -------------
// Current Code
func filterBySwitch(filterOption: String){
    print("You asked me to filter by \(filterOption)")
}
filterBySwitch(filterOption: "userOwns")

// -------------
// I though this is how I would pass the argument when only 3 available options
enum filterType {
    case userHeart
    case userOwns
    case userSeen
}
func filterBySwitch(filterOption: filterType){
    print("You asked me to filter by \(filterType)")
}
filterBySwitch(filterOption: .userOwns)

1 Ответ

3 голосов
/ 10 мая 2019

Вы можете сделать что-то вроде этого:

enum FilterType {
    case userHeart
    case userOwns
    case userSeen
}
func filterBySwitch(filterOption: FilterType){
    print("You asked me to filter by \(filterOption)") //<-
}
filterBySwitch(filterOption: .userOwns)

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

...