Swift 相当于 Haskell 显示

Swift equivalent of Haskell Show

Swift 等价于 Haskell Show 以打印 Enumerations with cases 中的值是什么?我读过 Show 与 Java toString() 方法非常相似并且 Swift CustomStringConvertible 可能是一个不错的选择。

例如,在 Fraction 实例上使用 print 会显示:

> 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)

您还需要在 description 中使用 switch 语句并读取关联值

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)"
  }
}

请注意,在 swift 中,枚举项应以小写字母开头,因此应为 fractionmixed