【问题标题】:Cannot convert the type 'int' to expected type NSTimeInterval in swift 2.0无法在 swift 2.0 中将类型“int”转换为预期类型 NSTimeInterval
【发布时间】:2016-07-01 20:49:02
【问题描述】:

我在 Objective-C 中有这个方法来返回发送到服务器的位置的时间戳。

-(NSDate *) toLocalTime
{
   NSTimeZone *tz = [NSTimeZone defaultTimeZone];
   NSInteger seconds = [tz secondsFromGMTForDate: [NSDate date]];
   return [NSDate dateWithTimeInterval: seconds sinceDate: [NSDate date]];
}  

这在 Obj-C 中完美运行 我已将其转换为 swift 2.0

func toLocalTime() -> NSDate {
    var tz : NSTimeZone = NSTimeZone.defaultTimeZone()
    var seconds: Int = tz.secondsFromGMTForDate(NSDate())
    return (NSDate(timeInterval: seconds, sinceDate: NSDate()))
} 

但是当我将其转换为 swift 2.0 时,此行会显示错误(如上面的标题所述),因为变量 seconds 是 Int 类型,并且应该传递给 dateWithTimeInterval 的变量应该是 NSTimeInterval。

错误:无法将类型“int”转换为预期类型 NSTimeInterval

Error line: return (NSDate(timeInterval: seconds, sinceDate: NSDate()))

请帮忙!

【问题讨论】:

  • 你不能直接去var seconds: NSTimeInterval = tz.secondsFromGMTForDate(NSDate()) 吗?

标签: ios objective-c swift


【解决方案1】:

如果你检查 Date 类 .. 你会发现 public typealias NSTimeInterval = Double 表示返回类型是 NSTimeInterval 的 Double ..

方法是

public convenience init(timeInterval secsToBeAdded: NSTimeInterval, sinceDate date: NSDate)  
// timeInterval -> return NSTimeInterval 
// date          -> return NSDate 

timeInterval 采用 Double 而不是 int ... 所以只需将其转换为 Double 即可

 func toLocalTime() -> NSDate {
    let tz  = NSTimeZone.defaultTimeZone()
    let seconds = tz.secondsFromGMTForDate(NSDate())
    return (NSDate(timeInterval: Double(seconds), sinceDate: NSDate()))
 } 

【讨论】:

【解决方案2】:

这是更新后的代码:

func toLocalTime() -> NSDate {
    let tz : NSTimeZone = NSTimeZone.defaultTimeZone()
    let seconds: Int = tz.secondsFromGMTForDate(NSDate())
    return (NSDate(timeInterval: Double(seconds), sinceDate: NSDate()))
}

你需要转换成Double

【讨论】:

  • 谢谢你,索希尔。我的代码中有另一个疑问,但在这部分没有。我可以在这里问还是我应该发布另一个问题?
  • @ManeeshSharma 你可以去这里!
  • 我有一个 HomeViewController : UITableViewController 和其他三个控制器,即 DetailsViewController : UITableViewController 和
  • AppcatalogViewController:UIViewController。在 homecontroller 的 didSelectRowAtindexpath 中,我正在使用 if (indexPath.section == 0){ var registeredView = DetailsViewController() self.navigationController?.pushViewController(enrolledView, animated: true) } 加载 otherControllers
  • 但是当我加载从 UIViewController 继承的 AppCatalogcontroller 时,错误显示为“使用未解析的标识符‘AppCatalogViewController’”。请帮助我应该如何加载它
【解决方案3】:

将 seconds:Int 转换为 Double

func toLocalTime() -> NSDate {
    var tz : NSTimeZone = NSTimeZone.defaultTimeZone()
    var seconds: Int = tz.secondsFromGMTForDate(NSDate())
    return (NSDate(timeInterval: Double(seconds), sinceDate: NSDate()))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多