[英]check for nil and extract data from dictionary in swift
如果用户提供日期值,我会将其存储在字典中:
let dict:Dictionary<String, Any> = ["fromDate":fromDate as Any]
如果用户不提供日期值,则将其存储在这样的字典中:
let dict:Dictionary<String, Any> = ["fromDate": [:] ]
我试图像这样从cellForRowAt
函数中的字典中检索值:
let dict:Dictionary<String, Any> = allDates[indexPath.row]
guard let fromDate:String = getDateString(createdDate: dict["fromDate"] as! Date) != nil else {
fromDate:String = "None"
}
cell.fromDateLabel.text = getTimeStringISO8601(createdDate: fromDate)
这是我日期字符串功能
func getDateString(createdDate:Date) -> String{
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.locale = Locale.current
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "yyyy-MM-dd"
return formatter.string(from: createdDate)
}
我在警卫声明中遇到错误:
类型“字符串”不是可选值,永远不能为零
如何检查date是否为nil并获取转换后的日期,如果date为nil则跳过它并在语句中输入“ None”而不是Date?
Guard语句中的错误是因为方法getDateString:
不返回可选值。 您正在检查该方法的返回值,根据定义,该值永远不会为零。 您需要从dict检查日期值,因为它是可选的。
尝试像
var fromDate = "None"
if let dateVal = dict["fromDate"] as? Date {
fromDate = getDateString(createdDate: dateVal)
cell.fromDateLabel.text = getTimeStringISO8601(createdDate: fromDate)
} else {
cell.fromDateLabel.text = fromDate
}
尝试这个:
let dict:Dictionary<String, Any> = allDates[indexPath.row]
if let date = dict["fromDate"] as? Date {
// the date is not nil
//here you can formate your date
}else{
//the date is nil, make additional stuff here
}
只需添加可选以返回方法的值
**func getDateString(createdDate:Date) -> String?**
class UIViewController: UIViewController {
guard let fromDate:String = getDateString(createdDate: Date()) else {
return
}
}
func getDateString(createdDate:Date) -> String?{
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.locale = Locale.current
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "yyyy-MM-dd"
return formatter.string(from: createdDate)
}
如果您想正确使用展开功能,请按以下步骤操作:
let dict:Dictionary<String, Any> = allDates[indexPath.row]
guard let fromDate: String = getDateString(createdDate: dict["fromDate"] as? Date) else {
fromDate:String = "None"
}
cell.fromDateLabel.text = getTimeStringISO8601(createdDate: fromDate)
并且您的函数应如下所示:
func getDateString(createdDate:Date?) -> String?{
if let createdDate = createdDate {
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.locale = Locale.current
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "yyyy-MM-dd"
return formatter.string(from: createdDate)
}
return nil
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.