Swift 4: Как инициализировать класс со значениями в одной строке?

У меня есть простой класс в Swift 4, как это:

class Message {

    var messageBody : String = ""
    var sender : String = ""

}

И я хочу (в одну строку) заполнить переменную экземпляром этого объекта.

Я пытался сделать это так:

func retrieveMessages() {
    let messageDB = Database.database().reference().child("Messages")
    messageDB.observe(.childAdded) { (snapshot) in
        let snapshotValue = snapshot.value as! Dictionary<String,String>
        let text = snapshotValue["MessageBody"]!
        let sender = snapshotValue["Sender"]!
        let message = Message(messageBody: text, sender: sender) // relevant one liner
    }
}

Но это не работает. Что я делаю неправильно?

Также обратите внимание, что это:

let message = Message()
message.messageBody = text
message.sender = sender

работает.

1 ответ

Решение

Просто используйте структуру, которая предоставляет бесплатный членный инициализатор

struct Message {   

    var messageBody : String 
    var sender : String
}

Или в случае с классом напишите один

class Message {

    var messageBody : String 
    var sender : String

    init(messageBody : String, sender : String) {
       self.messageBody = messageBody
       self.sender = sender
    }
}

В обоих случаях нет необходимости назначать значения по умолчанию.

Для получения дополнительной информации, пожалуйста, прочитайте https://docs.swift.org/swift-book/LanguageGuide/Initialization.html

Другие вопросы по тегам