我想记录她进入文本字段的历史。我打算用 UserDefaults 注册它。但是,当我尝试使用 UserDefaults 保存它时,“无法将类型为 'nsdate'?' 的值分配给类型 'String'” 错误。我认为它不接受文本字段数据,因为它是字符串。我怎样才能在记忆中保存历史?
formatteddate 和 formatteddate2 给出了这个错误。日期输出如下:20/04/2019 20:23
let token = try? keychain.getString("chipnumbernew")
chip1InfoString = token
var time = NSDate()
var formatter = DateFormatter()
formatter.dateFormat = "dd/MM/yyyy HH:mm"
var formatteddate = formatter.string(from: time as Date)
var formatteddate2 = formatter.string(from: time as Date)
timertextNew.text = formatteddate
timertext2New.text = formatteddate2
let RetrivedDate = UserDefaults.standard.object(forKey: "timertext") as? NSDate
formatteddate = RetrivedDate
let RetrivedDate2 = UserDefaults.standard.object(forKey: "timertext2") as? NSDate
formatteddate2 = RetrivedDate2
Run Code Online (Sandbox Code Playgroud)
Joa*_*son 54
如果您只想显示日期值,您可以将其转换并存储为字符串,否则您在阅读后转换/格式化它,无论哪种方式,您都应确保在保存和阅读时使用相同的类型
//save as Date
UserDefaults.standard.set(Date(), forKey: key)
//read
let date = UserDefaults.standard.object(forKey: key) as! Date
let df = DateFormatter()
df.dateFormat = "dd/MM/yyyy HH:mm"
print(df.string(from: date))
Run Code Online (Sandbox Code Playgroud)
// save as String
let df = DateFormatter()
df.dateFormat = "dd/MM/yyyy HH:mm"
let str = df.string(from: Date())
UserDefaults.standard.setValue(str, forKey: key)
// read
if let strOut = UserDefaults.standard.string(forKey: key) {
print(strOut)
}
Run Code Online (Sandbox Code Playgroud)
jam*_*her 23
以下将Date对象另存为Double(aka TimeInterval)。这避免了任何日期格式。格式化可能会失去精度,并且是不必要的,因为该字符串不是供用户阅读的。
// save
UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: key)
// read
let date = Date(timeIntervalSince1970: UserDefaults.standard.double(forKey: key))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14262 次 |
| 最近记录: |