2017-06-26 3 views
1

Ich habe eine Struktur in iOS Spielplatz geschrieben und möchte das Druckformat davon anpassen.Warum wird die CustomStringConvertible-Protokollbeschreibung mehrmals aufgerufen?

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) 

Das Ergebnis ist

enter image description here

Ich kann nicht verstehen, dass, obwohl ich print nur einmal aufgerufen, aber y in the range Nachricht 4 Mal gedruckt wird.

+3

Kann nicht reproduziert werden. - Warte: Hast du es auf einem Spielplatz versucht? –

+0

@MartinR wirklich? Weil ich einen neuen iOS Spielplatz erstelle, um die Bestätigung zu bestätigen, druckt die Konsole, wie ich gepostet habe – shoujs

+0

Ein Spielplatz zeigt die Werte in der rechten Spalte an und ruft deshalb 'description' mehrmals auf. –

Antwort

3

Wenn Sie einen Spielplatz verwenden, kann die Beschreibung eines Werts mehrfach berechnet werden, da er an mehreren Stellen angezeigt wird (z. B. auf der rechten Seite). Wenn Sie den Code in einer kontrollierteren Umgebung ausführen (wie im kompilierten Code oder in der REPL in einem Terminal), werden Sie feststellen, dass y in the range nur einmal gedruckt wird.

Auch sollten Sie Nebenwirkungen (wie print Anweisungen) in berechneten Eigenschaften vermeiden.

Verwandte Themen