我正在尝试创建具有Date
的模型对象,但在转换为init
方面我无法找到如何String
。
这是日期结构。
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”类型的值指定为“String?”
类型
var post: Post? {
didSet {
dateLabel.text = post?.Date
caprionLabel.text = post?.Text
}
}
有谁知道如何解决这个问题? 提前谢谢!
答案 0 :(得分:2)
您对日期和字符串感到困惑,两者都是不同的对象,您无法相互分配。
同一个
有两种解决方案如果您想要显示完全相同的日期,
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 ?? ""
}
}
另外,Label只能接受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 ?? ""
}
}
另外,Label只能接受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
}
}
答案 1 :(得分:1)
发生错误是因为Date
(大写)是Swift中的保留结构类型。错误消息
无法指定类型'日期的值。类型'输入' String?'
明确说明。
符合变量名称以小写字母开头的命名约定。它避免了这种愚蠢的类型错误。
并且永远不会将结构中的变量声明为隐式展开的可选项,这些变量在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
}
}