我按照视频教程制作推特克隆。本教程是用swift 2编写的。我试图申请Swift 3.但是在第3段视频中我遇到了问题。我可以保存推文,但我不知道如何在tableview中显示它。他正在使用这一行:
let tweet = tweets[(self.tweets.count-1) - indexPath.row]!.value["text"] as! String
视频系列:twitter clone with firebase
项目在此:Github Link
我的问题在这里:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: HomeViewTableViewCell = tableView.dequeueReusableCellWithIdentifier("HomeViewTableViewCell", forIndexPath: indexPath) as! HomeViewTableViewCell
let tweet = tweets[(self.tweets.count-1) - indexPath.row]!.value["text"] as! String
cell.configure(nil,name:self.loggedInUserData!.value["name"] as! String,handle:self.loggedInUserData!.value["handle"] as! String,tweet:tweet)
return cell
}
错误:“对成员计数的模糊引用”。
答案 0 :(得分:0)
因此,为了显示推文,您需要向Firebase实时数据库添加观察者。
self.databaseRef.child("user_profiles").child(self.loggedInUser!.uid).observeSingleEventOfType(.Value) { (snapshot:FIRDataSnapshot) in
//store the logged in users details into the variable
self.loggedInUserData = snapshot
print(self.loggedInUserData)
//get all the tweets that are made by the user
self.databaseRef.child("tweets/\(self.loggedInUser!.uid)").observeEventType(.ChildAdded, withBlock: { (snapshot:FIRDataSnapshot) in
self.tweets.append(snapshot)
self.homeTableView.insertRowsAtIndexPaths([NSIndexPath(forRow:0,inSection:0)], withRowAnimation: UITableViewRowAnimation.Automatic)
self.aivLoading.stopAnimating()
}){(error) in
print(error.localizedDescription)
}
}
如果你看下面的部分,
self.databaseRef.child("tweets/\(self.loggedInUser!.uid)").observeEventType(.ChildAdded, withBlock: { (snapshot:FIRDataSnapshot) in
self.tweets.append(snapshot)
self.homeTableView.insertRowsAtIndexPaths([NSIndexPath(forRow:0,inSection:0)], withRowAnimation: UITableViewRowAnimation.Automatic)
self.aivLoading.stopAnimating()
}){(error) in
print(error.localizedDescription)
}
他正在向数据库中添加一个观察者,只要有节点被添加到引用中,就会触发上面的代码。检查您是否已正确完成此操作。
如果您已正确完成此操作,请确保已将观察者添加到确切节点。这里,观察者附加到名为tweet
的节点 - > userID
。如果您有不同的数据库配置,您的参考将会有所不同。
在您学习的过程中,我会将转换保留为Swift 3语法。
答案 1 :(得分:0)
最后我解决了我的问题。对于Swift 3.1更新如下:
self.homeTableView.insertRows(at: [IndexPath(row:self.tweets.count-1,section:0)], with: UITableViewRowAnimation.automatic)
我在viewDidLoad中使用了上面的代码。 我使用推文[indexPath.row]。