麻烦从课堂上学习价值观

时间:2017-07-18 10:05:08

标签: swift class initialization

我正在学习快速的习惯,过去两周课程的使用让我很忙。

感谢您的帮助

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

比在viewcontroller类中想要检索那两个字符串。怎么做对了? 到目前为止,我尝试了许多不同的想法,但我要么得到空字符串(在课程开头初始化)或我得到错误

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

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]
    }
}

1 个答案:

答案 0 :(得分: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()

由于我所做的事与您在上述评论中添加的代码之间的差别非常小,我怀疑它是关于如何添加字符串而忽略的事情到数组。