Быстрый эквивалент Haskell Show

Что такое Swift-эквивалент Haskell Show для печати значений внутри перечислений с регистрами? Я читал, что Show очень похож на метод Java toString() и что Swift CustomStringConvertible может быть хорошим вариантом.

Например, при использовании print в экземпляре Fraction будет отображаться:

      > Fraction(numerator: 1, denominator: 2)

Вместо того, чтобы печатать весь ящик, я хотел бы напечатать только числа с косой чертой между ними. Например «1/2».

Мой текущий код следующий:

      enum MyNum: Equatable {
  case Fraction(numerator: Int, denominator: Int)
  case Mixed(whole: Int, numerator: Int, denominator: Int)
}

extension MyNum: CustomStringConvertible {
  var description: String {
    return "(\(Fraction.numerator) / \(Fraction.denominator))"
  }
}

var testFraction= MyNum.Fraction(numerator: 1, denominator: 2)
print(testFraction)

1 ответ

Решение

Вам нужно использовать оператор switch в description а также и прочтите связанные значения

      extension MyNum: CustomStringConvertible {
var description: String {
  switch self {
    case .Fraction(let n, let d):
    return "\(n) / \(d)"
    case .Mixed(let w, let n, let d):
    return "\(w) \(n) / \(d)"
  }
}

Обратите внимание, что элементы быстрого перечисления должны начинаться со строчной буквы, поэтому это должно быть fraction и mixed

Другие вопросы по тегам