Überschreiben Sie einen Setter im Handumdrehen

Ich habe ein seltsames Problem mit dem Setter im Handumdrehen. Ich habe eine Klasse-Spielkarte mit folgendem Code:

var rank: NSInteger {
    get{
        return self.rank
    }
    set(rank){
        self.rank = rank
    }
}

var suit: NSString {
    get{
        return self.suit
    }
    set(suit){
        self.suit = suit
    }
}

init(suit: NSString, rank: NSInteger) {
    super.init()
    self.suit = suit
    self.rank = rank
}

Ich verwende diese init () -Methode in einer anderen Klasse, und die Implementierung sieht folgendermaßen aus:

init() {
    super.init(cards: [])
    for suit in PlayingCrad.validSuit() {
        var rank: Int = 0
        for rank; rank <= PlayingCrad.maxRank(); rank++ {
            var card = PlayingCrad(suit: suit, rank: rank)
            addCard(card)
        }
    }
}

Und wenn der Code wie oben aussieht, ist ein Fehler aufgetreten:

self.suit = suit

EXC_BAD_ACCESS(code=2, adress=0x7fff5c4fbff8)

Aber als ich Setter und Getter abgenommen habeRang undpassen Attribut es hat gut funktioniert, hat sich kein Fehler gezeigt.

Können Sie mir erklären, warum das so ist?EXC_BAD_ACCESS Fehler ist aufgetaucht?

Danke für deine Hilfe

Antworten auf die Frage(1)

Ihre Antwort auf die Frage