为啥我会收到“从 '[String]' 转换为不相关的类型 'String' 总是失败”错误?
Posted
技术标签:
【中文标题】为啥我会收到“从 \'[String]\' 转换为不相关的类型 \'String\' 总是失败”错误?【英文标题】:Why am I receiving a "Cast from '[String]' to unrelated type 'String' always fails" error?为什么我会收到“从 '[String]' 转换为不相关的类型 'String' 总是失败”错误? 【发布时间】:2021-04-12 17:37:58 【问题描述】:我正在尝试将一组数据(存储在名为“产品”的 Firestore 数据库字段中)显示到 UITableViewController 中。我目前用来尝试将数组返回到我的应用程序的代码如下:
if userId == user?.uid
let group_array = document["product"] as? Array ?? [""]
let productName1 = (group_array) as? String
self.tableViewData =[cellData(opened: false, title: "Item 1", sectionData: [productName1 ?? "No data to display :("])]
当我运行它时,它会编译,但是我目前收到以下警告消息:
从 '[String]' 转换为不相关类型 'String' 总是失败”
这导致没有数据被返回,productName1
返回 nil,从而导致显示“没有数据显示:(”消息而不是数据。
有谁知道我需要为以下行分配哪种类型才能返回此数据?
let productName1 = (group_array) as? String
【问题讨论】:
group_array
是一个[String]
,它是一个String
的数组,想象它是一个String
的列表。您如何将其转换为String
,即就像您期待糖果一样,但您却给了一袋糖果。所以你会在里面挑选?
【参考方案1】:
您已将group_array
定义为Array
。然后您尝试将其转换为字符串。您不能将 Array(甚至是 String 对象的数组)强制转换为 String。
这一行:
let productName1 = (group_array) as? String
总会失败。
您在寻找什么结果?字符串数组中的第一个条目?将数组中所有元素组合在一起的字符串?
如果你想要第一个元素,使用
let productName1 = group_array.first as? string ?? ""
如果要组合项目,请使用以下内容:
let productNames = (group_array as? [String])?.joined(separator: ", ") ?? ""
顺便说一句,如果您将数组转换为字符串数组,而不仅仅是通用数组(任意数组),您的代码会更简洁
变化:
让 group_array = document["product"] as?大批 ?? [""]
收件人:
让 group_array = document["product"] as? [细绳] ?? [""]
【讨论】:
非常感谢 - 如果我想检索第二个元素,我会使用let productName2 = group_array.second as? string ?? ""
吗?手动搜索数组的第一个、第二个、第三个等元素似乎很乏味,所以我想知道是否有一种方法可以自动检索数组的每个元素并添加到单独的 cellData
部分。
没有。 Array 上没有属性 .second
。有一些特殊情况属性 .first
和 .last
可以让您获取数组中的第一个和最后一个元素(如果数组为空,则返回 nil。
Array 支持整数索引以及循环。一旦确保数组中有足够的元素,就可以使用group_array[2]
或for item in group_array
循环遍历它们。
好的,明白了。当我使用它来显示数组的第二个元素时,当只有 1 个元素时,应用程序崩溃,即使我使用的是 Optional (带有错误消息以显示一旦打开 productName2 后是否找不到任何内容)` let productName2 = group_array[2] ?? “没有要显示的数据:(”`是否有原因导致它崩溃而不是显示“没有要显示的数据:(”消息?
是的,这是意料之中的。 array[index]
仅在有足够的元素使 index
有效时才合法。在索引到数组之前,您需要先检查元素的数量。这些是语言基础。您可能应该阅读 Swift 基础知识。以上是关于为啥我会收到“从 '[String]' 转换为不相关的类型 'String' 总是失败”错误?的主要内容,如果未能解决你的问题,请参考以下文章