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