Swift 从类中获取值时遇到问题

Swift 从类中获取值时遇到问题,swift,class,initialization,Swift,Class,Initialization,我正在学习swift自动取款机,过去两周上课让我很忙 谢谢你的帮助 对于xcode中的一个项目,我创建了一个swift文件,其中包含一个初始化空字符串/字符串数组的类。 然后,该类中的一个函数从GoogleFirebase检索数据以填充这些字符串 而在viewcontroller类中,则需要检索这两个字符串。它是如何做对的? 到目前为止,我尝试了许多不同的想法,但我要么得到空字符串(在类的开头初始化),要么得到错误 理想情况下,每次调用viewcontroller类的viewdidload()(

我正在学习swift自动取款机,过去两周上课让我很忙

谢谢你的帮助

对于xcode中的一个项目,我创建了一个swift文件,其中包含一个初始化空字符串/字符串数组的类。 然后,该类中的一个函数从GoogleFirebase检索数据以填充这些字符串

而在viewcontroller类中,则需要检索这两个字符串。它是如何做对的? 到目前为止,我尝试了许多不同的想法,但我要么得到空字符串(在类的开头初始化),要么得到错误

理想情况下,每次调用viewcontroller类的viewdidload()(在本例中)时,我都希望它使用最新数据创建该类的实例

class RetrieveDatabase {

    //static let sharedInstance = RetrieveDatabase()

    var allMessages = [[String]]()
    var messages = [String]()
    var categorieNames = [String]()

    func loadGoogleValue() -> (allMessages: [[String]], categorieNames: [String]) {

        //this function works, the arrays contain type [string] and string                                                                                        
        return (self.allMessages, self.categorieNames)
    }

    /*
    -> i tried initializers in so many variations...
    init(allMessages: [[String]], categorieNames: [String]) {
        self.allMessages = loadGoogleValue().allMessages
        self.categorieNames = loadGoogleValue().categorieNames
        messages = []
    }
    */

}
下面是viewcontroller类中的代码:

class SettingsView: UIViewController {
     let retrieveDatabase = RetrieveDatabase.//tried everything here, only errors

     override func viewDidLoad() {
        super.viewDidLoad()
        label1.text = retrieveDatabase.categorieNames[0]
    }
}

我已经将您的代码简化为可以在操场上轻松试用的代码。如果你从一个工作版本开始,也许你可以看到它和给你带来麻烦的版本之间的区别

class RetrieveDatabase {
    var allMessages = [[String]]()
    var messages = [String]()
    var categorieNames = [String]()

    init() {
        messages.append("Hi")
        messages.append("Hello")
        allMessages.append(messages)
        categorieNames.append("SALUTATIONS")
    }

    func loadGoogleValue() -> (allMessages: [[String]], categorieNames: [String]) {
        return (self.allMessages, self.categorieNames)
    }
}

class SettingsView {
    let retrieveDatabase = RetrieveDatabase()

    func caller() {
        print(retrieveDatabase.loadGoogleValue().allMessages)
        print(retrieveDatabase.loadGoogleValue().categorieNames)
    }
}

let test = SettingsView().caller()

由于我所做的与您在上面的评论中添加的代码之间几乎没有什么区别,我怀疑您遗漏了关于如何将字符串添加到数组中的内容。

cmon伙计们?有人吗?为什么不像这样声明
retrieveDatabase
变量
let retrieveDatabase=retrieveDatabase()
谢谢您的回复,调用时字符串仍然为空……我只是被要求确保没有语法错误。在函数loadGoogleValue()中,为要访问的变量赋值的位置在哪里。该函数工作正常。我尝试了以下方法。还是空的<代码>让retrieveDatabase=retrieveDatabase()覆盖func viewDidLoad(){super.viewDidLoad()打印(retrieveDatabase.loadGoogleValue().allMessages)打印(retrieveDatabase.loadGoogleValue().categorieNames)}这看起来很难看谢谢。所以我发现了问题。loadgooglevalue func与我的代码是异步的。它的工作原理与使用firebase中的数据创建字符串一样,但函数不等待它,只返回空字符串。我对编程相当陌生,所以我会花一下午的时间来理解异步编程。一天的目标:让这一切顺利!再次感谢,很抱歉这么匆忙。