Swift 无法转换类型为';NSDate?&x27;到预期的参数类型';字符串';?
以下是代码: 来自服务器的Dict值:Swift 无法转换类型为';NSDate?&x27;到预期的参数类型';字符串';?,swift,date,nsdateformatter,Swift,Date,Nsdateformatter,以下是代码: 来自服务器的Dict值: { "leave_from" = "2016-10-26"; "leave_to" = "2016-10-30"; "user_id" = 327; } let date2 = dict["leave_from"] as! String let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "dd-MM-yyyy" let date = dateFo
{
"leave_from" = "2016-10-26";
"leave_to" = "2016-10-30";
"user_id" = 327;
}
let date2 = dict["leave_from"] as! String
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
let date = dateFormatter.dateFromString(date2)
self.FromDate.setTitle(date, forState: .Normal)
这里我得到的日期格式是yyyy-MM-dd
,但我想更改为dd-MM-yyy
,并显示在“开始日期”按钮中。请帮我找出解决方案。显然,dateFromString返回一个NSDate,而setTitle需要一个字符串 你需要在头脑中清楚地区分:NSDate是一个绝对的时间点。这与你的手表上的显示无关。如果我给你打电话,我们两人同时给NSDate()打电话,我们会得到相同的NSDate,即使我们的手表可能相隔数小时 字符串用于使用某种日历和某种格式显示日期。如果要更改日历或格式,请使用从字符串中读取NSDate的方法,然后使用另一种方法将NSDate转换为字符串。那部分不见了
注:不要坚持显示格式。使用当前日历以用户想要的任何格式显示NSDate 显然,dateFromString返回一个NSDate,而setTitle需要一个字符串 你需要在头脑中清楚地区分:NSDate是一个绝对的时间点。这与你的手表上的显示无关。如果我给你打电话,我们两人同时给NSDate()打电话,我们会得到相同的NSDate,即使我们的手表可能相隔数小时 字符串用于使用某种日历和某种格式显示日期。如果要更改日历或格式,请使用从字符串中读取NSDate的方法,然后使用另一种方法将NSDate转换为字符串。那部分不见了
注:不要坚持显示格式。使用当前日历以用户想要的任何格式显示NSDate 你做错了 首先,您试图用不正确的格式化程序读取日期。在第二秒钟,您将日期设置为按钮标题,它需要
String
,而不是NSDate
你应该这样写:
// Created variable to represent string you fetch from Dictionary
var dateString = "2016-10-30"
// Creates date formatter instance
let dateFormatter = NSDateFormatter()
// Sets date format required to read date from variable `dateString `
dateFormatter.dateFormat = "yyyy-MM-dd"
// Reads date form variable `dateString `
let date = dateFormatter.dateFromString(dateString)
// Sets date format required to convert `Date` to `String`
dateFormatter.dateFormat = "dd-MM-yyyy"
// Converts `Date` to `String`
let buttonTitle = dateFormatter.stringFromDate(date!)
// Creates example button (just for presentation needs)
let button = UIButton()
// Sets `String` title for a button
button.setTitle(buttonTitle, forState: .Normal)
在您的情况下,它将类似于:
let dateString = dict["leave_from"] as! String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.dateFromString(dateString)
dateFormatter.dateFormat = "dd-MM-yyyy"
let buttonTitle = dateFormatter.string(from: date)
self.FromDate.setTitle(buttonTitle, forState: .Normal)
p.S.小心用力打开你做错了 首先,您试图用不正确的格式化程序读取日期。在第二秒钟,您将日期设置为按钮标题,它需要
String
,而不是NSDate
你应该这样写:
// Created variable to represent string you fetch from Dictionary
var dateString = "2016-10-30"
// Creates date formatter instance
let dateFormatter = NSDateFormatter()
// Sets date format required to read date from variable `dateString `
dateFormatter.dateFormat = "yyyy-MM-dd"
// Reads date form variable `dateString `
let date = dateFormatter.dateFromString(dateString)
// Sets date format required to convert `Date` to `String`
dateFormatter.dateFormat = "dd-MM-yyyy"
// Converts `Date` to `String`
let buttonTitle = dateFormatter.stringFromDate(date!)
// Creates example button (just for presentation needs)
let button = UIButton()
// Sets `String` title for a button
button.setTitle(buttonTitle, forState: .Normal)
在您的情况下,它将类似于:
let dateString = dict["leave_from"] as! String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.dateFromString(dateString)
dateFormatter.dateFormat = "dd-MM-yyyy"
let buttonTitle = dateFormatter.string(from: date)
self.FromDate.setTitle(buttonTitle, forState: .Normal)
p.S.小心用力打开您正在使用DateFormatter的
dateFromString
方法,该方法从字符串返回日期(如名称所示)。您要做的是基于日期返回字符串,这就是为什么您应该使用stringFromDate
如果要更改日期的格式,首先必须使用JSON中的格式解析日期,然后只需更改DateFormatter的dateFormat
let date2 = dict["leave_from"] as! String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.dateFromString(date2)
dateFormatter.dateFormat = "dd-MM-yyyy"
let dateString = dateFormatter.string(from: date)
self.FromDate.setTitle(date, forState: .Normal)
您正在使用DateFormatter的
dateFromString
方法,该方法从字符串返回日期(如名称所示)。您要做的是基于日期返回字符串,这就是为什么您应该使用stringFromDate
如果要更改日期的格式,首先必须使用JSON中的格式解析日期,然后只需更改DateFormatter的dateFormat
let date2 = dict["leave_from"] as! String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.dateFromString(date2)
dateFormatter.dateFormat = "dd-MM-yyyy"
let dateString = dateFormatter.string(from: date)
self.FromDate.setTitle(date, forState: .Normal)
您缺少对方法签名的一些阅读
date
是一个NSDate
对象,并且setTitle(:forState:)
正在等待第一个参数的字符串对象,而不是NSDate
一个。找到解决方案了吗?。您缺少对方法签名的一些读取date
是一个NSDate
对象,并且setTitle(:forState:)
正在等待第一个参数的字符串对象,而不是NSDate
对象。得到解决方案了吗?。。