Swift 4: 如何在一行中用值初始化一个class?
Swift 4: How to initialise a class with values in one line?
我在 Swift 4 中有一个简单的 class,如下所示:
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
有效。
只需使用 struct,它提供免费的 memberwise 初始化器
struct Message {
var messageBody : String
var sender : String
}
或者如果 class 写一个
class Message {
var messageBody : String
var sender : String
init(messageBody : String, sender : String) {
self.messageBody = messageBody
self.sender = sender
}
}
在这两种情况下都不需要分配默认值。
我在 Swift 4 中有一个简单的 class,如下所示:
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
有效。
只需使用 struct,它提供免费的 memberwise 初始化器
struct Message {
var messageBody : String
var sender : String
}
或者如果 class 写一个
class Message {
var messageBody : String
var sender : String
init(messageBody : String, sender : String) {
self.messageBody = messageBody
self.sender = sender
}
}
在这两种情况下都不需要分配默认值。