2017-06-26 79 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語句)。

相關問題