我在Swift中遇到一个我不明白的错误。这是我操场上的代码:
class Person : CustomStringConvertible
{
let Name :String;
let DoB :NSDate?
init(name :String, dob :NSDate?)
{
Name = name;
DoB = dob;
}
func age() -> Double {
let now = NSDate();
let age :Double = now.timeIntervalSinceDate(self.DoB!);
return age;
}
var description : String {
return "Name: \(Name), Age: \(self.age())";
}
}
extension NSDate {
static func dateFromComponents(year :Int, month :Int, day :Int) -> NSDate {
let components = NSDateComponents();
components.year = year;
components.month = month;
components.day = day;
return components.date!;
}
}
let helena = Person(name: "Helena", dob: NSDate.dateFromComponents(1986, month: 8, day: 10));
print(helena);
答案 0 :(得分:4)
NSDateComponents date
属性的文档:
如果接收方的
nil
属性值为calendar
或无法将接收方转换为NSDate对象,则返回nil
。
您尚未设置日期组件' calendar
,.date
为零。有关展开选项的详情,请阅读the answers on this question。
答案 1 :(得分:1)
你的问题是那个
NSDate.dateFromComponents(1986, month: 8, day: 10)
返回nil。
您可以通过创建这样的日期对象来解决这个问题:
let format = NSDateFormatter()
format.dateFormat = "yyyy-MM-dd"
let date = format.dateFromString("1986-08-10")!
然后像这样传递:
let helena = Person(name: "Helena", dob: date);
print(helena);
let components = NSDateComponents()
components.year = 2000
components.month = 8
components.day = 1
let calender = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601)
let date2 = calender!.dateFromComponents(components)
let helena2 = Person(name: "Helena", dob: date2);