【问题标题】:Swift equivalent of Haskell Show相当于 Haskell Show 的 Swift
【发布时间】:2021-03-07 09:47:37
【问题描述】:

什么是 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)

【问题讨论】:

  • 我不知道 Haskell,但在 swift 中,java 中的 toString 等价于遵循 CustomStringConvertible 协议。但是您需要改进您的问题并包含您的快速代码并解释您想要实现的目标以及这样做的问题。斯威夫特 3,真的吗?现在已经很古老了。

标签: swift customstringconvertible


【解决方案1】:

您还需要在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

【讨论】:

  • 感谢@Joakim,这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多