【问题标题】:Cast Double? to String [duplicate]投双?到字符串 [重复]
【发布时间】:2020-03-30 22:06:39
【问题描述】:

我正在尝试施放双倍?到字符串。

我试过了

let price = eventDataFromPrevious.dtPrice as? String
eventPriceLabel.text = price!  + "€"

但是当我到达那个 VC 时,我得到了这个错误:

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

我的 eventDataFromPrevious 对象在转储中如下所示:

▿ LuxEvent.EventData #0
  - idEvent: "53"
  - dtTitle: "Anniversaire de Moon"
  - dtStartDate: "2020-4-15 20:0:0"
  - dtEndDate: "2020-4-16 5:0:0"
  ▿ dtPrice: Optional(1000.0)
    - some: 1000.0
  - dtAddress: "56, Avenue Frantz Clement, Mondorf-les-Bains, Luxembourg"
  - fiCategory: "8"
  - dtCity: ""
  - dtDescription: "Soirée déguisée, apportez tous vos chiens et chiennes, et pas besoin de capotes!"
  - dtLong: "6.27737"
  - dtLat: "49.503963"
  - dtImage: "defaultImage.jpg"

请注意,我必须将 dtPrice 作为 Double?因为如果活动是免费的,价格可以为零。

提前感谢您的帮助!

【问题讨论】:

  • 在这里观看:stackoverflow.com/questions/25339936/swift-double-to-string>
  • 谢谢,由于某种原因我没有找到那个帖子,抱歉!
  • 附带说明,即使在可行的情况下,使用as? 也是没有意义的,如果您要在下一行强制解开它。如果您 100% 确信它永远不会为 nil,则只需首先使用 as!,或者有条件地打开它,以便您可以安全地处理潜在的 nil 值。

标签: swift


【解决方案1】:

您不能将Double? 强制转换为String。最好改用String(describing:),例如

let price = String(describing: eventDataFromPrevious.dtPrice ?? 0.0) // 0.0 for "free"
eventPriceLabel.text = price + "€"

这也避免了强制解包结果,因为String(describing:) 返回一个String 而不是String?。

或者,如果您想显示“免费”而不是“0.0€”,您可以执行以下操作:

if let dtPrice = eventDataFromPrevious.dtPrice {
    let price = String(describing: dtPrice)
    eventPriceLabel.text = price + "€"
} else {
    eventPriceLabel.text = "Free"
}

【讨论】:

  • 如果为 UI 格式化一个数字,你应该使用NumberFormatter,而不是String(describing:)。
猜你喜欢
  • 2018-06-04
  • 1970-01-01
  • 2013-02-25
  • 2014-06-20
  • 2014-09-26
  • 2015-10-08
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多