2017-06-26 8 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) 

結果は、私は一度だけprintと呼ばれるが、y in the rangeメッセージは4回印刷されているにもかかわらず、ということを理解することはできません

enter image description here

です。

+3

再生できません。 - 待って:遊び場で試しましたか? –

+0

@ MartinR本当ですか?確認のために新しいiOSプレイグランドを作成するので、コンソールが表示されます。 – shoujs

+0

Playgroundは値を右側の列に表示し、 'description'を複数回呼び出します。 –

答えて

3

プレイグラウンドを使用している場合、値の説明は複数の場所(たとえば、右側)に表示されるため、複数回計算されることがあります。

より制御された環境(コンパイル済みコードや端末のREPLなど)でコードを実行している場合は、y in the rangeは1回だけ印刷されることに気づくでしょう。

また、計算されたプロパティで副作用(printなど)を避ける必要があります。

関連する問題