起因
因为给user一个特定的属性,是通过expiresIn赋值给expiresDate,就要去调用一个方法
var expiresIn:NSNumber?{ //直接在定义属性的时候写
didSet{
/*这个方法主要是属性被赋值的时候会被调用
*如果是对象初始化的时候,是不会调用的,如果想被调用,要使用kvc
*/
expiresDate = NSDate(timeIntervalSinceNow: (expiresIn?.doubleValue)!)
}
}
但是问题是,init的时候,不走这个方法,查阅了一下
英语不好,翻译的大概意思就是willSet和didSet如果在初始化的时候调用是无效的
但是又非常想在初始化的时候调用didSet,那么可以采用KVC的方式给对象初始化,就可以调用didSet了
使用完KVC,但是有些属性要注意,一旦属性名和字典中的key不同,一定要去特殊处理
init(dict:[String:AnyObject]) {
super.init()
setValuesForKeysWithDictionary(dict)
}
//使用kvc,undefine方法
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
if (key as NSString).isEqualToString("expires_in") {
//过期时间
expiresIn = value as? NSNumber
}else if (key as NSString).isEqualToString("access_token"){
accessToken = value as? String
}
}
有了过期的nsdate,要去和当前的时间去比较使用一个compare的方法,这个方法的结果比较难记
shardUser?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending
结果如下:
- OrderedDescending A>B 降序
- OrderedAscending A<B 升序
- OrderedSame A=B