我有一个包含文本字段和按钮的 VC。我有一个简单的任务是将 textField 文本数据传递到我的模型实体。但是,虽然我想将 textField 数据分配给实体数据,但我的数据仍然为零。 我不明白是什么导致了这样的问题
class InputTextViewController: UIViewController {
@IBOutlet weak var messageTextField: UITextField!
//I receive user from parent VC by segue
var userSendMessageTo: User!
var tableView: UITableView?
var message: Message { return Message(userSendMessageTo) }
// initialising object of my entity class
override func viewDidLoad() {
super.viewDidLoad()
print(userSendMessageTo.name)
//name is right
}
func createMessage() {
message.messageText = messageTextField.text
message.messageTime = Date()
print(message.messageText) //nil
print(message.messageTime) //nil
}
@IBAction func sendMessge(_ sender: Any) {
createMessage()
userSendMessageTo.mesaageHistory.append(message)
print(userSendMessageTo.mesaageHistory[0].messageText) //nil
}
我的模型
class Message {
var messageText: String?
var messageTime: Date?
var messageInage: UIImage?
var user: User
init(_ user: User) {
self.user = user
}
}
class User {
let name: String
var mesaageHistory = [Message]()
init(name: String) {
self.name = name
}
}
最佳答案
结构 var message: Message { return Message(userSendMessageTo) }
每次被调用时都会返回一个新的 Message 对象。
因此,您正在创建一个消息对象,为其分配文本,然后将其丢弃。然后您创建第二个消息对象,为其指定一个日期并将其丢弃。然后创建第三个消息对象并检查其文本(为 nil),然后创建第四个消息对象并检查其日期,该日期也为 nil。
试试这个:
class InputTextViewController: UIViewController {
@IBOutlet weak var messageTextField: UITextField!
var userSendMessageTo: User!
var tableView: UITableView?
var message: Message?
func createMessage() {
message = Message()
message!.messageText = messageTextField.text
message!.messageTime = Date()
print(message!.messageText) //won't be nil
print(message!.messageTime) //won't be nil
}
}
关于ios - 变量赋值后的 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43023131/