gpt4 book ai didi

ios - 尝试从类对象数组中读取值时得到 "fatal error: NSArray element failed to match the Swift Array Element type"

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:08 24 4
gpt4 key购买 nike

有一个问题我无法理解也找不到答案:我在一个 tableViewCOntroller 中有这个方法,它正在调用另一个带有 TableView 的 viewCOntroller

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowBook" {
if let selectedIndexPath = tableView.indexPathForSelectedRow {
let books = categoryStore.allCategories[selectedIndexPath.row].books

let destinationVC = segue.destinationViewController as! BookViewController
destinationVC.books = books
}
}
}

然后在 BookViewController 中我有这个只是为了测试:

var books = [Book]()

override func viewDidLoad() {
super.viewDidLoad()

print(books[0].name)
}

我可以看到 books var 是一个包含书籍的数组:

class Book {
var name: String = ""
var id: Int = -1
var categoryId: Int = -1
var bookAuthor: String = ""
var level1Name: String = ""
var level2Name: String = ""
var level3Name: String = ""
var level4Name: String = ""
var levels: Int = -1
var orderKey: Int = -1
var viewCount: Int = -1
var viewLevel: Int = -1
var chapters: [AnyObject] = []

所以我在 books var 中得到一个包含 13 个键/值对字典的 books 数组

当我尝试打印任何东西时,可以说:

print(books[0].name)

我得到错误:

fatal error: NSArray element failed to match the Swift Array Element type

我不明白为什么...

p.s 转换工作正常,我可以看到下一个表,但随后出现 fatal error

enter image description here

最佳答案

好的,让我们从你的错误开始。

fatal error: NSArray element failed to match the Swift Array Element type

swift 数组提示其中一个元素不是它所期望的。 NSArray 元素与 swift 数组元素不匹配。

现在我们知道 NSArray 可以存储不同类型的元素,例如,NSNumber、NSDictionary、NSString……你明白了。很明显,我们这里的问题与类型相关。

现在查看您的 segue 代码,我们可以看到我们实际上并没有说明 books 是什么类型,我们让 swift 的类型推断为我们解决了它。这是我们出现问题的第一个迹象。您期待一个 [Book] 数组,但由于某种原因,您得到的是一种 NSArray。

如果您从以下位置进行更改:

let books = categoryStore.allCategories[selectedIndexPath.row].books
let books : [Book] = categoryStore.allCategories[selectedIndexPath.row].books

你现在会在这一行崩溃,因为你现在声明的是预期的类型。

完整方法:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowBook" {
if let selectedIndexPath = tableView.indexPathForSelectedRow {
let books : [Book] = categoryStore.allCategories[selectedIndexPath.row].books

let destinationVC = segue.destinationViewController as! BookViewController
destinationVC.books = books
}
}
}

这是由您的调试器控制台输出支持的,它表示您有一个 13 NSDictionary 类型的数组。

这意味着您需要调查填充 [Book] 数组的位置 - 即 categoryStore.allCategories

关于ios - 尝试从类对象数组中读取值时得到 "fatal error: NSArray element failed to match the Swift Array Element type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37361543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com