如何将 firebase 函数提取到 Swift 中的对象?

Posted

技术标签:

【中文标题】如何将 firebase 函数提取到 Swift 中的对象?【英文标题】:How do I extract firebase functions to an object in Swift? 【发布时间】:2020-05-18 23:51:08 【问题描述】:

我是面向对象编程的新手,我正在尝试将逻辑从我的视图控制器中移到它自己的模型中,以便我可以重用端点调用等,但我不知道如何提醒我的视图控制器结果发生在对象内部。在 javascript 中,我通常只是将函数设置为返回一个值,但它不允许我返回 Void Cannot convert return expression of type 'Void' to return type 'String' 以外的任何内容。

import Foundation
import Firebase

class CloudFunctions 

    let functions = Functions.functions()

    func addNewAccount(param1: String) -> String 
        functions.httpsCallable(FunctionsConstants.myFunction).call(["param1Name":param1])  (result, error) in
            if let e = error 
                return "\(e)"
             else 
                if let result = result 
                    return "\(result.data)"
                 else 
                    return "Sorry, we couldn't unwrap the result."
                
            
        
    


在我的视图控制器中,我将其称为

let cloudFunctions = CloudFunctions()
self.result = cloudFunctions.addNewAccount(param1: dataHere)

我以为我可以在结果上创建一个 didSet 来更新 UI,但它不会让函数通过,因为我收到错误:Cannot convert return expression of type 'Void' to return type 'String'

【问题讨论】:

【参考方案1】:

你需要一个完成

func addNewAccount(param1: String,completion:@escaping(String -> ()))
    functions.httpsCallable(FunctionsConstants.myFunction).call(["param1Name":param1])  (result, error) in
        if let e = error 
            return "\(e)"
         else 
            if let result = result 
                completion("\(result.data)")
             else 
                 completion("Sorry, we couldn't unwrap the result.")
            
        
    


addNewAccount(param1:"")  str in


【讨论】:

这成功了!我以前从未见过的全新语法。这是处理这类函数的常用方法吗?

以上是关于如何将 firebase 函数提取到 Swift 中的对象?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 和 Swift 如何按子值提取特定记录?

函数没有返回,Swift Firebase

将两个不同的数组加载到 tableview (Swift)

将数据从 Firebase 提取到 RecyclerView 时出错。致命异常:...没有定义无参数构造函数

将数据从 Firebase 提取到 RecyclerView 时出错。致命异常:...没有定义无参数构造函数

当您在 Swift 中有嵌套函数时,如何将布尔值返回给外部函数?