我正在从Udemy教程中学习Swift,该教程展示了如何使用Firebase数据库制作聊天应用程序。为了自己的学习并作为快速参考指南,我在一个.swift文件中键入了代码,以快速了解整个应用程序并进行调试。但是,我还有一个编译器错误,指出常量“ messagesDB”没有成员“ setValue”。我假设messagesDB是类'Database'的实例,可以访问setValue()实例方法。您认为为了消除此错误我想念什么?与函数的声明方式有关吗?
Auth和Database这两个类都是模仿Firebase的任意类,因此可以显示其余代码而不会出现很多错误,从而为我提供了一个文件来查看其工作方式。
class Auth {
var currentUser: String = ""
func auth() -> Self { return self }
}
class Database {
func setValue() -> Self { return self }
func database() -> Self { return self }
func reference() -> Self { return self }
func child(_ someString: String) -> String {
print(someString)
}
}
class ChatViewController: UIViewController {
@IBOutlet var messageTextfield: UITextField!
@IBOutlet var sendButton: UIButton!
@IBAction func sendPressed(_ sender: AnyObject) {
messageTextfield.endEditing(true)
messageTextfield.isEnabled = false
sendButton.isEnabled = false
let messagesDB = Database().database().reference().child("Messages")
let messageDictionary = ["Sender": Auth().auth().currentUser, "MessageBody": messageTextfield.text!] as [String : Any]
messagesDB.setValue(messageDictionary) { //ERROR: Value of type 'String' has no member 'setValue'
(error, reference) in
if error != nil {
print(error!)
} else {
print("Message saved successfully!")
self.messageTextfield.isEnabled = true
self.sendButton.isEnabled = true
self.messageTextfield.text = ""
}
}
}
}
答案 0 :(得分:0)
apply(xdata[, x], 1, max) : dim(X) must have a positive length
方法返回一个child
而不是一个String
实例,因此返回错误消息。
首先创建数据库实例,然后在需要的地方使用它:
Database
答案 1 :(得分:0)
很简单,正在设置的messageDB常量等于返回字符串的函数“ child”,这就是为什么它告诉您“ string”没有成员setValue的原因,因此您应该将messageDB设置为Database ().database()。reference()