Swift如何初始化日期

时间:2017-12-26 11:29:42

标签: ios swift

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

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

2 个答案:

答案 0 :(得分:2)

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

同一个

有两种解决方案
  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 ?? ""
    }
    }
    

    另外,Label只能接受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 ?? ""
        }
    }
    

    另外,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
    }
}