индекс вне диапазона массива индекс - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь изучить принцип SOLID, и у меня возникает проблема, когда я хочу подписать массив, он показывает сообщение об ошибке.но когда я пытаюсь подписаться под arc4random_uniform, сообщение об ошибке не появляется.кто-нибудь может показать мне, что это не так?

Тема: 1 фатальная ошибка: индекс вне диапазона

это мой код в классе предметов

class Item: NSObject {
var imageName: String
var label: String

init(imageName: String, label: String) {
    self.imageName = imageName
    self.label = label

    super.init()
}

convenience init(list: Bool = false) {
    if list {
        let imageList = ["milada-vigerova", "david-rodrigo", "quran"]
        let labelList = ["Fiqih", "Hadist", "Tafsir"]

        // The sortImage and sort label, the error show up
        let sortImageName = imageList[imageList.count]
        let sortLabel = labelList[labelList.count]

        self.init(imageName: sortImageName, label: sortLabel)
    } else {
        self.init(imageName: "", label: "")
    }
  }
}

обновить вопрос.это еще одна ошибка в appDelegate при исправлении индекса

let itemStore = ItemStore()
    let homeController = window?.rootViewController as! HomeController
    homeController.itemStore = itemStore

это мой класс itemStore

class ItemStore {
var allItems = [Item]()

@discardableResult func createItem() -> Item {
    let newItem = Item(list: true)
    allItems.append(newItem)

    return newItem
}

init() {
    for _ in 0..<3 {
        createItem()
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

imageList имеет 3 элемента и последний элемент с индексом 2, аналогично labelList , изменяет код в две строки:

// The sortImage and sort label, the error show up
let sortImageName = imageList[imageList.count - 1]
let sortLabel = labelList[labelList.count - 1]
0 голосов
/ 25 февраля 2019

Индекс в массиве начинается с 0, поэтому массив из 3 элементов имеет индексы 0,1 и 2 и count = 3, поэтому для доступа к последнему элементу массива с помощью count необходимо выполнить [someArray.count -1]

if list {
    let imageList = ["milada-vigerova", "david-rodrigo", "quran"]
    let labelList = ["Fiqih", "Hadist", "Tafsir"]

    // The sortImage and sort label, the error show up
    let sortImageName = imageList[imageList.count - 1]
    let sortLabel = labelList[labelList.count - 1]

...

Обратите внимание, что arc4random_uniform(n) возвращает значение в диапазоне от 0 до n-1, поэтому, например, выполнение arc4random_uniform(imageList.count) будет отлично работать

...