2017-06-26 55 views
1

我在iOS游戏中编写了一个结构,并且想定制它的打印格式。为什么CustomStringConvertible协议描述被多次调用?

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) 

结果是

enter image description here

我无法理解的是,即使我称为print仅一次,但正在打印y in the range消息4倍。

+3

无法重现。 - 等等:你在游乐场试过吗? –

+0

@MartinR真的吗?因为我创建了一个新的iOS游乐场以进行双重确认,所以我发布了控制台打印 – shoujs

+0

游乐场在右栏显示值,因此多次调用“说明”。 –

回答

3

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

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

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

相关问题