【问题标题】:Swift 3; Appending optional string with non-optional string斯威夫特 3;用非可选字符串附加可选字符串
【发布时间】:2016-07-06 14:02:51
【问题描述】:

我刚刚更新到 Xcode 8.0 beta 2 和 swift 3.0,我在一些现有的 swift 2.3 代码中遇到了关于可选字符串的错误:

二元运算符“+”不能应用于“字符串”类型的操作数和 “字符串!”

变量“store”是“Store”对象的一个​​实例,其属性为addressStreetaddressCity,均定义为var addressStreet: String!

addressLabel.text = ... 行出现错误

if store != nil {
    addressLabel.text = store!.addressStreet + String(", ") + store!.addressCity
}

我不明白!对我来说,似乎没有一个字符串是可选的,为什么会出现这个错误,我该如何解决?

【问题讨论】:

  • 你真的不应该像这样滥用隐式展开的选项。
  • 我相信这是一个已知的错误,详情请参阅this thread(错误报告here)。
  • 我无法重现该问题,您能出示您的Store 课程代码吗?
  • 这似乎是一个错误。用“,”替换 String(", ") 解决了我的问题。

标签: ios swift string optional swift3


【解决方案1】:

我不知道它为什么会崩溃,但下面的代码更安全并且没有'String' + 'String!' 问题。试试看:

if let store = store, street = store.addressStreet, city = store.addressCity {
    addressLabel.text = "\(street), \(city)"
}

【讨论】:

  • addressLabel.text = street + ", " + city 更好,IMO。
  • @AMomchilov "\(street), \(city)" 怎么样? street + ", " + city 对我来说看起来太 PHP 了 :)
  • street + ", " + city 最简洁明了。如果超过 3-4 项,我会说joined 会更好
  • 我同意@Arsen 的观点,即"\(street), \(city)" 更具可读性(而且它还有一个额外的好处是我们不必怀疑streetcity 是否是字符串)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2019-07-15
  • 2017-03-01
  • 2018-12-29
  • 1970-01-01
  • 2015-08-03
相关资源
最近更新 更多