Swift 为什么我会收到一封“信”;从';[字符串]';不相关类型';字符串';“总是失败”;错误?
我试图在UITableViewController中显示一组数据(存储在名为“产品”的Firestore数据库字段中)。我当前用于尝试将阵列返回到我的应用程序的代码如下:Swift 为什么我会收到一封“信”;从';[字符串]';不相关类型';字符串';“总是失败”;错误?,swift,uitableview,uikit,Swift,Uitableview,Uikit,我试图在UITableViewController中显示一组数据(存储在名为“产品”的Firestore数据库字段中)。我当前用于尝试将阵列返回到我的应用程序的代码如下: if userId == user?.uid { let group_array = document["product"] as? Array ?? [""] let productName1 = (group_array) as? Stri
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
您已将
组数组
定义为数组
。然后尝试将其强制转换为字符串。无法将数组(甚至是字符串对象数组)强制转换为字符串
这一行:
let productName1 = (group_array) as? String
永远都会失败
您在寻找什么结果?字符串数组中的第一个条目?将数组中的所有元素组合在一起的字符串
如果需要第一个元素,请使用
let productName1 = group_array.first as? string ?? ""
如果要组合这些项目,请使用以下方法:
let productNames = (group_array as? [String])?.joined(separator: ", ") ?? ""
顺便说一句,如果将数组转换为字符串数组,而不仅仅是泛型数组(任意数组),那么代码会更干净
更改:
将组数组=文档[“产品”]设为数组??[“”]
致:
将组数组=文档[“产品”]设为?[String]??[“”]
组数组
是一个[String]
,它是一个字符串的数组
,想象它是一个字符串的列表
。如何将它转换成字符串
,就像你期待一个糖果,但你给了一袋糖果。所以你会在里面挑逗吗?非常感谢-如果我想检索第二个元素,我会使用让productName2=group吗_数组。秒为?字符串??“”
?手动搜索数组的第一个、第二个、第三个等元素似乎非常繁琐,因此我想知道是否有一种方法可以自动检索数组的每个元素并添加到一个单独的cellData
部分。否。数组上没有属性。第二个。有特殊情况的属性st
和.last
用于获取数组中的第一个和最后一个元素(如果数组为空,则返回nil)。数组支持整数索引和循环。一旦确保数组中有足够的元素,就可以使用组_数组[2]
或用于组数组中的项循环。好的,理解。当我使用此选项显示数组的第二个元素时,当只有1个元素时,应用程序崩溃,即使我使用可选选项(打开productName2后会显示一条错误消息以显示是否找不到任何内容)`let productName2=组数组[2]??“没有要显示的数据:”(“`是否有原因说明它为什么会崩溃,而不是显示“没有要显示的数据:”(“消息?是的,这是预期的。array[index]
仅当有足够的元素使索引
有效时才合法。在索引到数组中之前,您需要先检查元素的数量。这些是语言基础。您可能应该阅读一些Swift基础知识。