【问题标题】:String? is not convertible to 'NSString'细绳?不能转换为“NSString”
【发布时间】:2015-11-24 02:21:58
【问题描述】:

我正在学习有关 Udemy 的 Apple WatchKit 课程,我在其中创建了一个货币转换类型的应用程序。以下语法适用于视频中的绅士,但给我一个错误:

func parser(parser: NSXMLParser, foundCharacters string: String?) {
....

currencyConversions[getCurrency] = (string as NSString).doubleValue

他说我们需要先把这个对象转换成一个NSString,然后再把它转换成一个double。但是,我收到以下错误:

字符串?不能转换为 'NSString'

也许他正在使用更新版本的 Swift/Xcode?我该如何解决这个问题?

【问题讨论】:

  • 好吧,除非你告诉我们他的版本和你的版本,否则我们无法知道他是否有更新的版本。
  • 我假设他使用的是 Xcode 7+,而我使用的是 Xcode 6.4
  • 我已经尝试展开,但没有成功
  • 你需要比“没用”更具体
  • 你真的应该升级到 Xcode 7.1,因为 Swift 语言自 6.4 以来发生了显着变化。无论如何,试试这个:currencyConversions[getCurrency] = string.flatMap { Double($0) }

标签: ios swift


【解决方案1】:

这适用于 Xcode 6.4Xcode 7.1.1

由于sOptional String,因此您需要在将其转换为NSString 之前安全地打开它。使用 nil 合并运算符 ?? 来做到这一点:

currencyConversions[getCurrency] = ((string ?? "") as NSString).doubleValue

【讨论】:

  • 这将解决您的String? is not convertible to NSString 错误,这是一个编译错误。如果您仍然在此行上看​​到 fatal error: Array index out of range,这是一个运行时错误,因为 getCurrency 大于数组的最大索引。这是一个不同的问题。
【解决方案2】:

NSString 有一个由普通字符串组成的构造函数。尝试从 NSString(string!) 调用它,希望它可以工作!

【讨论】:

    【解决方案3】:

    您需要在转换之前解开字符串对象。在展开之前不要忘记检查可选对象的 nil 值。

    if (string != nil){
       currencyConversions[getCurrency] = (string! as NSString).doubleValue
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      相关资源
      最近更新 更多