我正在尝试创建具有Date
的模型对象,但我找不到如何在转换为String
方面init
。
这是日期结构。
let date = NSDate()
let format = DateFormatter()
format.dateFormat = "yyyy-MM/dd HH:mm"
let strDate = format.string(from: date as Date)
型
import UIKit
struct Post {
var Date: Date!
var Text: String
init(dictionary: [String:Any]) {
self.Date = dictionary["Date"] as? Date
self.Text = dictionary["Text"] as? String ?? ""
}
}
从Firebase获取数据后,我想像下面那样做,但错误说
无法将类型"Date.Type"的值分配给类型"字符串?">
var post: Post? {
didSet {
dateLabel.text = post?.Date
caprionLabel.text = post?.Text
}
}
有谁知道我该如何解决这个问题? 提前谢谢你!
你对日期和字符串感到困惑,两者都是不同的对象,你不能互相分配。
有两种解决方案可以解决
-
如果您想显示完全相同的日期,
import UIKit struct Post { var dateString:String! var Text: String init(dictionary: [String:Any]) { self.dateString = dictionary["Date"] as? String self.Text = dictionary["Text"] as? String ?? "" } }
另外,标签只能接受字符串来保存
var post: Post? { didSet { dateLabel.text = post?.dateString caprionLabel.text = post?.Text } }
-
在模型中保存日期和字符串
struct Post { var dateString:String! var date:Date! var Text: String init(dictionary: [String:Any]) { self.dateString = dictionary["Date"] as? String let format = DateFormatter() format.dateFormat = "yyyy-MM/dd HH:mm" // If dateString doesn't match your date Format Provided self.date = format.date(from: dateString) ?? Date() self.Text = dictionary["Text"] as? String ?? "" } }
另外,标签只能接受字符串来保存
var post: Post? { didSet { let format = DateFormatter() // Assign to any format you want format.dateFormat = "yyyy-MM/dd HH:mm" dateLabel.text = format.string(from: post!.date) caprionLabel.text = post?.Text } }
发生此错误是因为Date
(大写)是 Swift 中的保留结构类型。错误消息
无法分配类型为"日期"的值。键入"以键入"字符串?
明确指出。
符合变量名称以小写字母开头的命名约定。它避免了这种愚蠢的类型错误。
并且永远不要将结构中的变量声明为隐式解包的可选变量,这些变量在init
方法中初始化。如果它们应该是可选的,则将它们声明为常规可选(?
)。
并将代码用于将日期格式化为结构中的字符串。
import UIKit
struct Post {
var date: Date?
var text: String
init(dictionary: [String:Any]) {
self.date = dictionary["Date"] as? Date
self.text = dictionary["Text"] as? String ?? ""
}
var formattedDate : String {
let format = DateFormatter()
format.dateFormat = "yyyy-MM/dd HH:mm"
return format.string(from: date)
}
}
var post: Post? {
didSet {
dateLabel.text = post?.formattedDate
caprionLabel.text = post?.text
}
}