Swift 4:如何用一行值初始化一个类?

时间:2018-08-17 11:23:40

标签: swift class initialization swift4 swift-class

我在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 个答案:

答案 0 :(得分:2)

只需使用结构,即可提供免费的 memberwise 初始化程序

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
    }
}

在两种情况下都无需分配默认值。

有关更多信息,请阅读Swift Language Guide : Initialization