Почему описание протокола CustomStringConvertible вызывается несколько раз?
Я написал структуру на игровой площадке 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 раза.
1 ответ
Решение
Если вы используете игровую площадку, описание значения может быть вычислено несколько раз, поскольку оно будет отображаться в нескольких местах (например, справа).
Если вы выполняете код в более контролируемой среде (например, в скомпилированном коде или в REPL в терминале), вы заметите, что y in the range
будет напечатан только один раз.
Также следует избегать побочных эффектов (например, print
заявления) в вычисляемых свойствах.