0

什么是 Haskell Show 的 Swift 等价物,用于在带有案例的枚举中打印值?我读过 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)
4

1 回答 1

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

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

于 2021-03-07T10:45:26.287 回答