快速如何初始化日期



我正在尝试创建具有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
}
}

有谁知道我该如何解决这个问题? 提前谢谢你!

你对日期字符串感到困惑,两者都是不同的对象,你不能互相分配。

有两种解决方案可以解决

  1. 如果您想显示完全相同的日期,

    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
    }
    }
    
  2. 在模型中保存日期和字符串

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

最新更新