Le enumerazioni Swift hanno sia valori associati sia valori non elaborati. Ma i casi d'uso di questi valori non mi sono chiari. Quindi sarei davvero grato se qualcuno potesse spiegare la differenza tra i valori associati e grezzi, un esempio sarebbe molto utile.Differenza tra valori associati e grezzi nelle enumerazioni rapide
risposta
I valori non elaborati si riferiscono a quando ogni caso nell'enumerazione è rappresentato da un valore impostato in fase di compilazione. La sono simili alle costanti, cioè
let A = 0
let B = 1
è simile a:
enum E: Int {
case A // if you don't specify, IntegerLiteralConvertible-based enums start at 0
case B
}
Quindi, A
ha un valore grezzo fisso di 0
, B
di 1
ecc impostato al momento della compilazione. Devono essere tutti dello stesso tipo (il tipo del valore grezzo è per l'intero enum, non per ogni singolo caso). Possono essere solo stringhe, caratteri o numeri letterali-convertibili. E devono essere tutti distinti (non è possibile che due enumerazioni abbiano lo stesso valore grezzo).
valori associati sono più come variabili associate con uno dei casi enumerazione:
enum E {
case A(Int)
case B
case C(String)
}
Qui, A
ora ha associato un Int
che può contenere qualsiasi valore intero. B
d'altra parte, non ha alcun valore associato. E C
ha associato String
. I tipi associati possono essere di qualsiasi tipo, non solo stringhe o numeri.
Qualsiasi valore determinato di tipo E
sarà sempre e solo contenere uno dei tipi associati, cioè o un Int
se l'enumerazione è un A
, o un String
se l'enumerazione è un C
. Ha solo bisogno di spazio sufficiente per il più grande dei due. Tipi come questo sono a volte indicati come "unioni discriminate": un'unione è una variabile che può contenere più tipi diversi, ma tu sai (dal caso enum) quale tiene.
Possono anche essere generici. L'esempio più comune dei quali è Optional
, che è definito così:
enum Optional<T> {
case .Some(T)
case .None
}
se è come: 'caso A (orderNumber: Int, account: String)' quale sarebbe il tipo associato allora? una tupla su Int, String? – Honey
@Honey "Definire un tipo di enumerazione denominato Barcode, che può assumere un valore di upc con un valore associato di tipo (Int, Int, Int, Int) o un valore di qrCode con un valore associato di tipo String." https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html – Sakshi
http://www.allinterview.com/showanswers/191460/in-swift-enumerations-s-difference-between-raw-values -and-associated-values.html – sasquatch