Я попытался выполнить следующий простой пример карты, но продолжаю получать ошибку при попытке получить доступ к свойству Array. В частности, в func getRandomCard() карты становятся недоступными после нажатия кнопки Flip. Поведение непоследовательно, иногда ошибка возникает при первом нажатии кнопки, а в другое время кнопка может быть нажата несколько раз до возникновения ошибки. Что я делаю не так? Спасибо за понимание.Swift Array плохой доступ
//Class PlayingCardDeck
import Foundation
let validSuits = ["♣️", "♦️", "♥️", "♠️"]
let maxRank = 13
class PlayingCardDeck {
var cards: [PlayingCard] = []
init() {
for suit in validSuits {
for rank in 1...maxRank {
var card = PlayingCard()
card.suit = suit
card.rank = rank
self.addCard(card)
}
}
}
func addCard(aCard: PlayingCard) {
cards.append(aCard)
}
func getRandomCard() -> PlayingCard {
let idx = Int(arc4random()) % cards.count
let retCard = cards[idx]
cards.removeAtIndex(idx)
return retCard
}
}
//Class PlayingCard
import Foundation
let rankStrings = ["?", "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
class PlayingCard {
var suit = "?"
var rank = 0
var contents: String {
get {
return rankStrings[rank] + suit
}
}
}
//Class ViewController
import UIKit
class ViewController: UIViewController {
var myDeck = PlayingCardDeck()
@IBOutlet weak var cardLabel: UILabel!
@IBAction func flipButton(sender: UIButton) {
let s = myDeck.getRandomCard().contents
cardLabel.text = s
}
}
Убедитесь, что индекс является действительным в отладчике или с 'Println()'. Пройдите и посмотрите значения. Oh BTW, эта строка и ** точное полное сообщение об ошибке. – zaph
Спасибо, действительно, это была ошибка индекса, но сообщение об ошибке не указало индекс массива вне диапазона, но Thread 1: EXC_BAD_INSTRUCTION on line let retCard = cards [idx] – zvweiss