在Swift中将NSNumber转换为NSTimeInterval

9

我是一个Swift的新手,遇到了一些类型转换的问题。

这是我的代码:

 if let matchDateTime = item["matchDate"].number {
     _matchDateTime=matchDateTime
 }

 println(_matchDateTime)                      
 let date = NSDate(timeIntervalSince1970:_matchDateTime)

但是它给我返回了一个错误:
Extra argument timeSinceInterval1970 in call

我不知道那个错误是什么,可能是将 NSNumber 转换为 NSTimeInterval,但怎么做呢?毫无头绪。

是否有人可以帮我解决这个问题。

提前感谢。


您需要点击复选标记来接受您所得到的正确答案之一。点赞完全是可选的,但是通过提问,如果最佳答案回答了问题,您应该接受它。不接受正确答案被认为是 SO 上的无礼行为。 - Duncan C
你需要接受你所得到的答案之一,或者解释它们为什么不能解决你的问题。在SO上不接受正确答案被认为是非常不礼貌的行为。 - Duncan C
2个回答

32

NSTimeInterval只是一个类型别名,代表的是Double

因此,从NSNumber强制转换为NSTimeInterval:

let myDouble = NSNumber(double: 1.0)
let myTimeInterval = NSTimeInterval(myDouble.doubleValue)

编辑:反之亦然。

let myTimeInterval = NSTimeInterval(1.0)
let myDouble = NSNumber(double: myTimeInterval)

编辑2: 正如@DuncanC在下面的评论中指出的那样,您可以直接在方法调用中进行类型转换:

let date = NSDate(timeIntervalSince1970: NSTimeInterval(_matchDateTime))

1
Swift在NSNumber和标量数字类型之间的转换方面比Objective-C更加友好,因此您还可以使用语法Double(myDouble)NSTimeInterval(myDouble),其中myDouble是NSNumber,就像您的答案中一样。 - Duncan C
很棒,Swift以更好的方式处理了这个问题。但我仍然更喜欢上面的方法,因为它更干净(在我看来),并且不太可能在新版本的Swift中出现问题(因为它使用已经建立的NSNumber Cocoa API)。 - Blake Merryman
1
好的。在使用Swift时,我更喜欢Swift风格。我想这是个人口味吧。(而且我认为像类型转换这样的核心特性的更改是极不可能的。该语言的这部分已经定义得很好了。) - Duncan C

5
尝试将NSNumber转换为Double。以下代码在Playground中有效:
let aNumber: NSNumber = 1234567.89
let aDate = NSDate(timeIntervalSinceReferenceDate: Double(aNumber))

2
你应该接受我的答案或者 Blake 的答案。两个都可以解决你的问题。选择一个你感觉更舒适的吧。 - Duncan C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接