尝试在iOS中实现firebase / firestore,添加以下内容使我在Extra argument in call
上遇到(snapshop , error)
错误。
T.subCollectionRef(of: parentDocument.ref).document(documentID).getDocument { snapshot, error in
completion(Result(snapshot, error)
.map { snapshot in snapshot.exists ? .init(snapshot: snapshot) : nil }
)
}
PS:我是个超级菜鸟。
答案 0 :(得分:0)
当您在.map
上致电Result
时,我不太确定要实现什么。
在快速Result
枚举类型中定义了两种边缘情况:
.success<Success>
.failure<Failure>
看看您的init
的{{1}}扩展名:
Result
我可以看到,如果第一个参数(在您的情况下为public extension Result {
init(_ success: Success?, _ failure: Failure?) {
if let success = success {
self = .success(success)
} else if let failure = failure {
self = .failure(failure)
} else {
fatalError("Illegal combination found.\n Success: \(success as Any), Failure: \(failure as Any)")
}
}
}
)不是snapshot
,那么您将创建一个nil
结果,否则您将创建一个.success
结果与提供的.failure
。如果两者均为error
,您将以nil
当您在fatalError
上调用.map
时,此操作仅在Result
为Result
的情况下在内部执行,例如.success
是非snapshot
。但是,在关闭地图时,您检查是否为nil
,如果不是,则返回snapshot.exists
。但这将是非法的,因为它会导致新的nil
具有关联的值Result.success
。
您必须检查如何将nil
结果映射到新结果类型的逻辑。
我想您真正想要的是以下内容:如果存在.success
,和 snapshot
为真,那么您想要使用snapshot.exits
调用完成处理程序,否则使用Result.success
调用完成处理程序。与此类似的东西:
Result.failure