斯威夫特 3;用非可选字符串附加可选字符串
Posted
技术标签:
【中文标题】斯威夫特 3;用非可选字符串附加可选字符串【英文标题】:Swift 3; Appending optional string with non-optional string 【发布时间】:2016-07-06 14:02:51 【问题描述】:我刚刚更新到 Xcode 8.0 beta 2 和 swift 3.0,我在一些现有的 swift 2.3 代码中遇到了关于可选字符串的错误:
二元运算符“+”不能应用于“字符串”类型的操作数和 “字符串!”
变量“store”是“Store”对象的一个实例,其属性为addressStreet
和addressCity
,均定义为var addressStreet: String!
addressLabel.text = ...
行出现错误
if store != nil
addressLabel.text = store!.addressStreet + String(", ") + store!.addressCity
我不明白!对我来说,似乎没有一个字符串是可选的,为什么会出现这个错误,我该如何解决?
【问题讨论】:
奇怪,这适用于 Swift 2.2 swiftlang.ng.bluemix.net/#/repl/577d1066fc6e90d25e4ad0d5 你真的不应该像这样滥用隐式展开的选项。 我相信这是一个已知的错误,详情请参阅this thread(错误报告here)。 我无法重现该问题,您能出示您的Store
课程代码吗?
这似乎是一个错误。用“,”替换 String(", ") 解决了我的问题。
【参考方案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)"
更具可读性(而且它还有一个额外的好处是我们不必怀疑street
和city
是否是字符串)。
以上是关于斯威夫特 3;用非可选字符串附加可选字符串的主要内容,如果未能解决你的问题,请参考以下文章