2016-03-14 5 views
14

Sto imparando rapidamente e ho trovato il semplice codice qui sotto.proprietà memorizzate "testo" senza valore iniziale impedisce inizializzatori sintetizzati

class ARandom{ 
    var number: Int = 0 
    var text: String 
} 

Tuttavia, Xcode visualizza il seguente errore:

stored property "text" without initial value prevents synthesized initializers 

Perché succede questo? cos'è un inizializzatore sintetizzato? perché "testo" senza valore iniziale previene l'inizializzatore systhesised? Qualcuno potrebbe gentilmente dirmelo gentilmente? Grazie in anticipo per qualsiasi aiuto!

risposta

20

Hai alcune opzioni qui.

  1. Fare text opzionale.

    var text: String?

  2. Dare text un valore predefinito

    var text: String = ""

  3. Dare text un valore in ARandom s' inizializzazione

    init() { text = "" }

Il motivo per cui ciò si verifica è che si sta definendo text come String. Non è opzionale In sostanza, stai dicendo che è sempre un String e mai nil.

Con il codice corrente se è stato creato una nuova istanza di ARandom, text non avrebbe alcun valore - e che non è possibile se text non è un optional

documenti di Apple probabilmente spiegare un po 'meglio

Classes and structures must set all of their stored properties to an appropriate initial value by the time an instance of that class or structure is created. Stored properties cannot be left in an indeterminate state.

You can set an initial value for a stored property within an initializer, or by assigning a default property value as part of the property’s definition.

+2

Inoltre, se il tuo pattern di utilizzo è quello di creare l'oggetto una volta e mai modificarlo, allora crea una 'struct' e tutte le variabili membro sono definite con' let'. Questo creerà un init sintetizzato che prende i valori per tutte le variabili unset. – ColGraff

+0

grazie mille! questa è una spiegazione molto dettagliata! risolto molto del mio fraintendimento! grazie ancora! –

+0

@KennethBruno grazie per l'attenzione! lo apprezzo davvero! –