È possibile modificare le strutture in modo corretto, ma è necessario annotare i metodi di modifica con mutating
.
struct SomeStruct {
var x:Int = 0
mutating func increment() {
x++;
}
}
Edit:
Permettetemi di fare alcune precisazioni qui. Le strutture possono essere mutati:
var structA = SomeStruct()
structA.x // 0
structA.increment()
structA.x // 1
Ma solo se dichiarati come var
. Questo non verrà compilato:
let structA = SomeStruct()
// structA.increment() // Compile error
Ora, quando si fa qualcosa di simile something.methodReturningStruct().mutatingMethod()
, il methodReturningStruct()
sarà effettivamente restituire una copia della struct originale (in virtù dei tipi di valore). Ma dal momento che non l'hai assegnato a var
, verrà trattato implicitamente come costante (ad esempio let
) in modo da ottenere l'errore del compilatore.
È ancora possibile fare la stessa cosa, ma basta dire rapido per utilizzare lo struct come var
var structB = something.methodReturningStruct()
structB.mutatingMethod()
fonte
2014-06-12 04:29:41
mostrano il codice e il messaggio di errore completo (indicano anche che la linea) –
Editing domanda e l'aggiunta di codice –