为什么我会收到“从 '[String]' 转换到不相关的类型 'String' 总是失败”错误?

问题描述

我正在尝试将一组数据(存储在名为“product”的 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 定义为 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"] 作为?大批 ?? [""]

致:

让 group_array = document["product"] 作为? [细绳] ?? [""]