2017-04-25 2 views
0

Mein Problem wird unten erklärt. TLDR: mein Code erfordert, dass ich eine dritte Variable verwende, um den Wert einer berechneten Eigenschaft darzustellen. Ich frage mich, ob es einen Weg gibt, es mit nur zwei Variablen zu machen.Underlying Variable in einer berechneten Eigenschaft | Swift

Also habe ich eine berechnete Eigenschaft namens firstNumber, die eine boolesche ist. Jedes Mal wenn sein Wert geändert wird, möchte ich eine andere Variable ändern, isDecimal, die unabhängig von firstNumber ist und viele verschiedene Dinge hat, die es ändern.

Um dies zu tun, wenn firstNumber auf false gesetzt ist, setze ich auch isDecimal auf false. Das einzige Problem ist, dass ich auch die firstNumber Boolesche haben muss, um einen Wert zu haben, also habe ich einen zugrunde liegenden booleschen Namen firstNumberAPI erstellt.

Ich glaube nicht, dass dies der beste Weg ist, um zu tun, was ich versuche zu tun. Ich frage mich, ob jemand eine Möglichkeit vorschlagen kann isDecimal setzen, wenn firstNumber geändert wird, ohne eine dritte, firstNumberAPI Variable zu erstellen.

var isDecimal = false 
var firstNumberAPI = false 

var firstNumber: Bool{ 
    get{ 
     return firstNumberAPI 
    } 
    set{ 
     firstNumberAPI = newValue 
     if newValue==true{ 
      isDecimal = false 
     } 
     else{ 
      isDecimal = true 
     } 
    } 
} 

Antwort

3

Es gibt keine Notwendigkeit für die firstNumberAPI Variable. Ändern firstNumber zu:

var isDecimal = false 

var firstNumber: Bool { 
    didSet { 
     isDecimal = !firstNumber 
    } 
} 

Siehe Property Observers Abschnitt des The Swift Programming Language Buch für Details über didSet.

+0

Vielen Dank für Ihre Hilfe! Könntest du vielleicht erklären, was "Didset" ist? Ich habe diese Syntax noch nie zuvor gesehen. –

+1

@JamesDorfman Siehe mein Update. – rmaddy

+0

@LeoDabus Natürlich ist das nicht richtig. Sie benötigen 'var firstNumber: Bool = true {...}'. – rmaddy

Verwandte Themen