2017-07-18 40 views
0

我正在学习swift atm,在最近两周里,课程的使用让我很忙。麻烦交际班值

感谢您的帮助

在Xcode中我创建了一个包含初始化字符串空字符串/数组类迅速文件的项目。 那么该类中的一个函数就是从google firebase中检索数据来填充这些字符串。

比在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 = [] 
    } 
    */ 

} 

这里从视图 - 控制类的代码:

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

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

cmon guys?任何人? – felixmp

+0

你为什么不声明像这样的'retrieveDatabase'变量? 'let retrieveDatabase = RetrieveDatabase()' –

+0

感谢您的回复,字符串在调用时仍然是空的... – felixmp

回答

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() 

由于之间我做了什么,你在上面您的评论添加的代码相差无几的,我怀疑它的东西,你忽略了有关如何将字符串添加到阵列。

+0

谢谢。所以我发现了这个问题。 loadgooglevalue func与我的代码是异步的。它的工作原理与它使用来自Firebase的数据创建字符串一样,但函数不会等待它,只是返回空字符串。 即时编程很新,所以生病下午试图理解异步编程。今天的目标:做这项工作! 再次感谢和抱歉的喧嚣。 – felixmp