如何使用变量初始化新的 Firebase @FirestoreQuery 属性包装器?
Posted
技术标签:
【中文标题】如何使用变量初始化新的 Firebase @FirestoreQuery 属性包装器?【英文标题】:How to initialize the new Firebase @FirestoreQuery property wrapper with variables? 【发布时间】:2021-11-15 02:38:58 【问题描述】:我使用新的 @FirestoreQuery 属性包装器,它与下面的代码一起使用。但我需要使用它/用变量初始化它,我该怎么做(见下文我要做什么)?
import SwiftUI
import FirebaseFirestoreSwift
struct TestFirestoreQuery: View
@State var itemLimit: Int = 5
let increment: Int = 5
@FirestoreQuery(collectionPath: "/discussions/blablabal/messages",
predicates: [
.order(by: "dateCreated", descending: true),
.limit(to: 5)
]
) fileprivate var MessageResults: Result<[Message_M], Error>
var body: some View
VStack
if case let .success(Messages) = MessageResults
List(Messages.reversed()) message in
Text("\(message.msg)")
.refreshable
itemLimit += increment
$MessageResults.predicates = [
.order(by: "dateCreated", descending: true),
.limit(to: itemLimit)
]
else if case let .failure(error) = MessageResults
// Handle error
Text("Couldn't map data: \(error.localizedDescription)")
Button
itemLimit += increment
$MessageResults.predicates = [
.order(by: "dateCreated", descending: true),
.limit(to: itemLimit)
]
label:
Text("Tap me!")
.padding()
.foregroundColor(.white)
.background(.red)
我想做什么,但它不起作用:
...
@State var itemLimit: Int = 5
let increment: Int = 5
let path: String = "/discussions/blablabal/messages"
@FirestoreQuery(collectionPath: path,
predicates: [
.order(by: "dateCreated", descending: true),
.limit(to: itemLimit)
]
) fileprivate var MessageResults: Result<[Message_M], Error>
...
我收到了这些错误:
不能在属性初始化器中使用实例成员“路径”;属性初始化程序在 'self' 可用之前运行...
不能在属性初始化器中使用实例成员“itemLimit”;属性初始化器在“self”可用之前运行
【问题讨论】:
您似乎遇到了*** thread 中提到的类似问题。可以试试accepted answer中提到的答案吗? 【参考方案1】:好的,你可以在 onAppear 中初始化它们:
.onAppear
$MessageResults.path = path
$MessageResults.predicates = [
.order(by: "dateCreated", descending: true),
.limit(to: itemLimit)
]
【讨论】:
【参考方案2】:在创建 @FirestoreQuery
时,路径变量还不可用。
为什么需要将路径作为单独的变量?直接把String传入@FirestoreQuery
会不会更方便?
@FirestoreQuery(collectionPath: "/discussions/blablabal/messages",
predicates: [
.order(by: "dateCreated", descending: true),
.limit(to: itemLimit)
]
这样您就不必添加 onAppear 修饰符。
【讨论】:
以上是关于如何使用变量初始化新的 Firebase @FirestoreQuery 属性包装器?的主要内容,如果未能解决你的问题,请参考以下文章
Swift 2.3 pod 更新后使用未解析的标识符 Firebase 'FIR'
是否可以通过 API 创建一个新的 Firebase 项目?
为什么新的Firebase Crashlytics(没有Fabric)在Android中不起作用?