1

我在 iOS 操场上写了一个结构,想自定义它的打印格式。

struct Point {
    let x: Int, y: Int
}

extension Point: CustomStringConvertible {
    var description: String {
       switch (x, y) {
       case let (x, 1..<10):
          print("y in the range")
          return "(\(x), 1..<10)"
       default:
          return "(\(x), \(y))"
      }
   }
}

let p = Point(x: 1, y: 1)
print(p)

结果是

在此处输入图像描述

我无法理解,即使我print只打了一次电话,但y in the range消息却被打印了 4 次。

4

1 回答 1

3

如果您使用的是游乐场,一个值的描述可能会被计算多次,因为它会显示在多个位置(例如右侧)。

如果您在更受控的环境中执行代码(例如在编译代码中或在终端中的 REPL 中),您会注意到y in the range只会打印一次。

此外,您应该避免计算属性中的副作用(如print语句)。

于 2017-06-26T13:36:16.853 回答