Xcode 9.4.1: значение типа 'String' не имеет члена 'setValue' - PullRequest
0 голосов
/ 04 марта 2019

Я изучаю Swift из учебника Udemy, в котором показано, как создать приложение для чата с использованием базы данных Firebase.Для собственного обучения и в качестве краткого справочного руководства я набрал код в одном файле .swift, чтобы получить быстрый обзор всего приложения и отладить практику.Однако у меня есть еще одна ошибка компилятора, говорящая о том, что константа messagesDB не имеет члена setValue.Я предполагаю, что messagesDB, являющийся экземпляром класса Database, будет иметь доступ к методу экземпляра setValue ().Как вы думаете, что мне не хватает, чтобы заставить эту ошибку замолчать?Имеет ли это какое-то отношение к способу объявления функций?

И класс Auth, и база данных являются произвольными классами, имитирующими 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 = ""
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Это просто, ваша константа messageDB устанавливается равной функции child, которая возвращает строку, поэтому она говорит вам, что строка не имеет члена setValue, поэтому вы должны просто установить для messageDB значение Database() .database (). ссылка ()

0 голосов
/ 04 марта 2019

метод child возвращает экземпляр String, а не экземпляр Database, следовательно, сообщение об ошибке.

сначала создайте экземпляр базы данных, а затем используйте его при необходимости:

let messagesDB = Database()
.
.
messagesDB.setValue(...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...