DMS*_*lva 4 string swift swift3
我试图在swift 3中连接多个字符串:
var a:String? = "a"
var b:String? = "b"
var c:String? = "c"
var d:String? = a! + b! + c!
Run Code Online (Sandbox Code Playgroud)
编译时我收到以下错误:
error: cannot convert value of type 'String' to specified type 'String?'
var d:String? = a! + b! + c!
~~~~~~~~^~~~
Run Code Online (Sandbox Code Playgroud)
这曾经在swift 2中工作.我不知道为什么它不再起作用.
OP提交的错误报告:
哪个已经解决(修复承诺掌握2017年1月3日),因此应该不再是即将到来的Swift 3.1中的问题.
这似乎是一个错误(在Swift 2.2中不存在,只有3.0)与以下情况相关:
!在表达式中使用强制解包运算符()至少3个术语(使用至少2个基本运算符测试,例如+或-).x!术语本身,在表达式中).对于以下所有示例,请:
let a: String? = "a"
let b: String? = "b"
let c: String? = "c"
Run Code Online (Sandbox Code Playgroud)
存在错误:
// example 1
a! + b! + c!
/* error: ambiguous reference to member '+' */
// example 2
var d: String = a! + b! + c!
/* error: ambiguous reference to member '+' */
// example 3
var d: String? = a! + b! + c!
/* error: cannot convert value of type 'String'
to specified type 'String?' */
// example 4
var d: String?
d = a! + b! + c!
/* error: cannot assign value of type 'String'
to specified type 'String?' */
// example 5 (not just for type String and '+' operator)
let a: Int? = 1
let b: Int? = 2
let c: Int? = 3
var d: Int? = a! + b! + c!
/* error: cannot convert value of type 'Int'
to specified type 'Int?' */
var e: Int? = a! - b! - c! // same error
Run Code Online (Sandbox Code Playgroud)
错误不存在:
/* example 1 */
var d: String? = a! + b!
/* example 2 */
let aa = a!
let bb = b!
let cc = c!
var d: String? = aa + bb + cc
var e: String = aa + bb + cc
/* example 3 */
var d: String? = String(a!) + String(b!) + String(c!)
Run Code Online (Sandbox Code Playgroud)
然而,由于这是Swift 3.0- 开发,我不确定这是否真的是一个"错误",以及在尚未生产的代码版本中报告"错误"的策略是什么,但可能你应该提交雷达为此,以防万一.
至于回答你的问题,如何规避这个问题:
或者,更好的是,使用安全展开您的可选项,例如使用可选的绑定:
var d: String? = nil
if let a = a, b = b, c = c {
d = a + b + c
} /* if any of a, b or c are 'nil', d will remain as 'nil';
otherwise, the concenation of their unwrapped values */
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
11182 次 |
| 最近记录: |