2014-11-28 10 views
7

Inkrementieren Ich schreibe eine Swift-App und Probleme beim Inkrementieren einer Member-Variable Int-Typ.In Intw typed Mitglied Variable in Swift

Ich habe die Variable mit

let index:Int 

dann in der Initialisierungsliste instanziiert ich es

self.index = 0 

Später verwenden, wenn ich versuche, es in einer Funktion zu erhöhen, entweder von

self.index++ 
mit

oder

self.index = self.index + 1 

Mir wird im ersten Fall gesagt, dass "++" nicht mit Argument vom Typ 'Int' "aufgerufen werden kann und im zweiten Fall, dass 'Pos' in 'self' nicht zugewiesen werden kann".

Ich konnte keine Informationen über den Operator ++ finden, außer dass Sie benutzerdefinierte Versionen davon schreiben können, aber ich würde annehmen, dass es zumindest in den Integer-Typ eingebaut ist. Wenn das nicht stimmt, dann beantwortet das diese Frage.

Die andere Frage habe ich keine Ahnung.

Danke!

Antwort

18

In

class MyClass { 

    let index : Int 

    init() { 
     index = 0 
    } 

    func foo() { 
     index++ // Not allowed 
    } 
} 

index ist eine Konstante gespeichert Eigenschaft. Es kann einen Anfangswert

let index : Int = 0 

und kann nur während Initialisierung modifiziert werden, gegeben werden (Und es muss einen bestimmten Wert haben, wenn die Initialisierung abgeschlossen ist.)

Wenn Sie den Wert ändern möchten nach

var index : Int 

Mo: seine Initialisierung dann werden Sie es als Variable gespeichert Eigenschaft deklarieren müssen Weitere Informationen finden Sie unter "Properties" in der Swift-Dokumentation.

Beachten Sie, dass die ++ und -- in Swift sind veraltet 2.2 und entfernt in Swift 3 (wie in einem Kommentar erwähnt), so - wenn sie als Variable deklariert - erhöhen Sie es mit

index += 1 

stattdessen.

+0

Danke für die Hilfe! Ich habe irgendwo falsch gelesen, dass Eigenschaften mit let anstelle von var deklariert werden müssten. – NumberOneRobot

+0

Diese Compilerfehler sind in diesem Fall völlig irreführend. –

+0

++ operator arbeitet auch mit swift nur ex: value ++ nicht value ++ (einige mal die Angabe der Kompilierzeit Fehler) – Alok

2

Ich denke, man kann

let index:Int 

in

var index:Int = 0 

ändern, weil Sie den Wert index werden Inkrementieren seinen Wert zu ändern, müssen Sie es als var erklären. Es ist auch erwähnenswert, dass let verwendet wird, um eine Konstante zu deklarieren.

Dann können Sie self.index++ verwenden. Beachten Sie, dass zwischen self.index und ++ kein Platz ist.

Hoffe, das wird helfen.

Verwandte Themen