swift - Cast Double? to String
问题描述
I'm trying to cast A double? to String.
I've tried
let price = eventDataFromPrevious.dtPrice as? String
eventPriceLabel.text = price! + "€"
but I get this error when I get to that VC:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
My eventDataFromPrevious object looks like this in a dump:
▿ 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"
Note that I have to have dtPrice as a Double? because the price can be nil if an event is free.
Thanks for the help in advance!
解决方案
你不能强制 aDouble?
到 a String
。最好改为使用String(describing:)
,例如
let price = String(describing: eventDataFromPrevious.dtPrice ?? 0.0) // 0.0 for "free"
eventPriceLabel.text = price + "€"
这也避免了强制解包结果,因为String(describing:)
返回 aString
而不是 a String?
。
或者,如果您想显示“免费”而不是“0.0€”,您可以执行以下操作:
if let dtPrice = eventDataFromPrevious.dtPrice {
let price = String(describing: dtPrice)
eventPriceLabel.text = price + "€"
} else {
eventPriceLabel.text = "Free"
}
推荐阅读
- twilio - 使用 GATHER 在 Twilio 中收集用户名
- windows - 未知的 Objective-C 运行时“微软”
- javascript -
静态资源忽略Angular - dji-sdk - 'DJI.WindowsSDK.DJISDKManager' 抛出异常
- android - Kotlin:EditText 在 afterTextChanged() 中为空
- ruby-on-rails - 嵌套 pdfs - 虾
- python - 嵌套表达式求值器
- elasticsearch - 如何提高 Elasticsearch 5.6.7 写入性能
- php - 为什么 Doctrine PostPersist Event 错过了我的夹具类的第一个 Instance 元素?
- php - 特殊 ä ö 字符打破 UTF-8 编码