为什么 CustomStringConvertible 协议描述被多次调用?
Why CustomStringConvertible protocol description being called multiple times?
我在 iOS playground 中写了一个结构体,想自定义它的打印格式。
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 次。
如果您使用的是 playground,则可能会多次计算某个值的描述,因为它会显示在多个位置(例如右侧)。
如果您在更受控的环境中执行代码(例如在编译代码中或在终端的 REPL 中),您会注意到 y in the range
只会打印一次。
此外,您还应避免计算属性中的副作用(如 print
语句)。
我在 iOS playground 中写了一个结构体,想自定义它的打印格式。
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 次。
如果您使用的是 playground,则可能会多次计算某个值的描述,因为它会显示在多个位置(例如右侧)。
如果您在更受控的环境中执行代码(例如在编译代码中或在终端的 REPL 中),您会注意到 y in the range
只会打印一次。
此外,您还应避免计算属性中的副作用(如 print
语句)。