Быстрые выходные дни в виде строк - PullRequest
0 голосов
/ 27 мая 2019

Я хочу использовать перечисление для преобразования целых чисел в строковое имя дня недели. Я придумал следующее

// Enum to output days
enum EnumDays : Int
{
    case MONDAY = 0
    case TUESDAY
    case WEDNESDAY
    case THURSDAY
    case FRIDAY
    case SATURDAY
    case SUNDAY
}

var weekDay = EnumDays.init(rawValue: 0)
print("Day = \(String(describing: weekDay))")

Но мы выводим тип как в

"День = Необязательно (SubscriptInSwift.EnumDays.MONDAY)"

как я могу создать вывод в виде строки, т. Е .:

"День = Понедельник"

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

Ответы [ 3 ]

2 голосов
/ 27 мая 2019

Вы можете использовать CustomStringConvertible

enum EnumDays: Int, CustomStringConvertible
{
    var description: String {
        switch self {
        case .MONDAY:
            return "Monday"
        case .TUESDAY:
            return "Tuesday"
        case .WEDNESDAY:
            return "Wednesday"
        case .THURSDAY:
            return "Thursday"
        case .FRIDAY:
            return "Friday"
        case .SATURDAY:
            return "Saturday"
        case .SUNDAY:
            return "Sunday"
        }
    }
    case MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
}

И использовать, если позволяют развернуть объект enum

if let weekDay = EnumDays.init(rawValue: 0) {
    print("Day = \(weekDay)")
}

Вы можете получить неделюдней с Calendar.current.weekdaySymbols

print(Calendar.current.weekdaySymbols)//["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
print(Calendar.current.shortWeekdaySymbols)//["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
1 голос
/ 27 мая 2019

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

enum DaysOfWeek : Int
{
  case MONDAY = 0
  case TUESDAY
  case WEDNESDAY
  case THURSDAY
  case FRIDAY
  case SATURDAY
  case SUNDAY

  var asString : String
  {
    var resource = ""
    switch self
    {
      case .MONDAY: resource =  "Monday"
      case .TUESDAY : resource =  "Tuesday"
      case .WEDNESDAY:  resource =  "Wednesday"
      ...
    }

    // Use Internationalization, as appropriate.
    return NSLocalizedString(resource, comment: resource)
  }

}
1 голос
/ 27 мая 2019

Вам просто нужно развернуть неделю недели

print("Day = \(String(describing: weekDay!))")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...