【问题标题】:Use NSTimer with "let"?将 NSTimer 与“let”一起使用?
【发布时间】:2015-08-19 20:02:08
【问题描述】:

您好,我正在尝试在 Swift 2.0 项目的一个类中使用 NSTimer。我想使用let 常量作为时间间隔,但它总是显示错误“字符串不可转换为 stringLiteralConvertible”。当我使用一个简单的数字时它可以工作,但我需要一个常量

func setupLocationUpdateInterval(seconds: Int)
{
    timer?.invalidate()
    timer = NSTimer.scheduledTimerWithTimeInterval(seconds, target: self, selector: "startUpdatingLocation", userInfo: nil, repeats: true)
}

【问题讨论】:

  • 在您尝试使用 let 常量的地方显示您的代码,以便我们看到您尝试了什么。
  • 需要提一下的是swift 2.0
  • 秒是常数,它显示与我使用 let seconds = 10... 相同的错误...
  • scheduledTimerWithTimeInterval的第一个参数的类型必须是NSTimeInterval(双)而不是Int
  • @vadian 正如我在下面的回答中所说的那样。

标签: ios swift constants nstimer swift2


【解决方案1】:

错误看起来是错误的。 (你从 Swift 得到的错误信息通常与问题的真正原因完全无关,只是告诉你“这条线有问题。弄清楚它是什么修复它。”这比这样的错误要好,因为至少那时您不会认为错误消息实际上提供了有用的信息。)

NSTimer.scheduledTimerWithTimeInterval 方法需要一个双精度区间值。

假设我对 real 问题的看法是正确的,您可以将函数更改为将秒数作为双精度数,或者在您对 NSTimer.scheduledTimerWithTimeInterval 的调用中将其转换为双精度数。

【讨论】:

  • @Gibastek 这就是为什么要求 let 行的原因。令人惊讶的是,OP 有多少次拒绝提供所请求的关键信息。
  • 非常感谢,我需要做的就是查看 NSTimeInterval 的类型... :D
  • @Gibastek 考虑接受有帮助的答案(比如这个)。对一个问题或答案投赞成票向社区的其他人表明该帖子很有趣、经过充分研究且有用,而对一个帖子投反对票则表示相反:该帖子包含错误信息、研究不足或无法沟通信息。单击最佳答案旁边的空心复选标记。 See this page for more detail.
【解决方案2】:

换行:

func setupLocationUpdateInterval(seconds: Int)

用线:

func setupLocationUpdateInterval(seconds: NSTimeInterval)

或者,如果您想在某处使用 let 常量,请确保其类型为 NSTimeInterval

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    相关资源
    最近更新 更多