为啥在使用“.count”返回 Swift 下标计数时收到不正确的数组计数?
Posted
技术标签:
【中文标题】为啥在使用“.count”返回 Swift 下标计数时收到不正确的数组计数?【英文标题】:Why am I receiving an incorrect array count when using ".count" to return a Swift subscript count?为什么在使用“.count”返回 Swift 下标计数时收到不正确的数组计数? 【发布时间】:2021-06-17 23:46:58 【问题描述】:我目前正在创建一个 ios 应用程序,它允许用户添加许多不同的产品,每个产品都添加到 Google Firestore 数组中,类似于下面的示例。
产品
[0]“产品名称:测试,上市价格:5,简要说明:测试,产品 URL:测试,上市有效期至:20/06/2021 12:19” [1]“产品名称:Test2,上市价格:5,简要说明:test2,产品网址:Test2,上市有效期至:26/06/2021 12:19”作为其中的一部分,我使用以下 Swift 代码返回产品用户列表的下标计数(在上面的示例中为 2),以允许他们查看他们当前列出了多少产品.
let db = Firestore.firestore()
let user = Auth.auth().currentUser
db.collection("users").getDocuments (snapshot, error) in
if let error = error
print(error)
return
else
for document in snapshot!.documents
let data = document.data()
let userId = data["uid"] as! String
if userId == user?.uid
let group_array = document["product"] as? [String] ?? [""]
let productCount = (group_array.count)
但是,一旦用户最初注册帐户并被重定向到欢迎页面,由于某种原因,每当使用上述语法时,它都会返回“1”,表示用户添加了产品,如下面的示例(但值得注意的是,“1”值显示在应用程序周围的许多其他位置,用户可以在其中查看他们当前的产品数量。
但是,用户在数据库中的数据集中没有产品,如下所示,因此由于应用程序认为 group_array.count 值 > 0,因此在尝试查看此项目时返回意外的 nil,导致应用程序崩溃并因此阻止我将应用程序添加到 TestFlight。
在运行时分析期间,显示单个产品,但返回为空字符串,而这在数据库中不存在。
目前,我的 Xcode 项目中所有与 Firestore 相关的 pod 都设置为相同的 iOS 14.5 部署目标,当我使用新创建的帐户添加另一个产品然后继续删除该产品时,应用程序再次开始工作正如预期的那样,计数反映了正确的“产品”下标总数。
这是我的 pod 配置、我的应用程序还是 Google Firestore SDK 的问题?如果是这样,请提供任何修复或指导来解决/修复此问题?
【问题讨论】:
【参考方案1】:这一行:
let group_array = document["product"] as? [String] ?? [""]
如果document["product"]
为nil
或转换为[String]
失败,则将组数组设置为包含单个空字符串。
问题是[""]
,这不是一个空数组,它是一个包含一个元素的数组(如您所见),该元素是一个空字符串""
。
也许您打算像这样输入[]
:
let group_array = document["product"] as? [String] ?? []
这会给你一个空数组。
【讨论】:
非常感谢您的帮助 - 非常感谢,它现在按预期工作。以上是关于为啥在使用“.count”返回 Swift 下标计数时收到不正确的数组计数?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 OleDb ExecuteScalar 方法在查询 COUNT 时返回 Decimal?
为啥在 Swift 的单数返回表达式中使用闭包简写变量必须详尽无遗?