当前位置: 首页 > 面试题库 >

如何在swift 3.0中连接多个可选字符串?

李奕
2023-03-14
问题内容

我正在尝试快速连接多个字符串3:

var a:String? = "a"
var b:String? = "b"
var c:String? = "c"
var d:String? = a! + b! + c!

编译时出现以下错误:

error: cannot convert value of type 'String' to specified type 'String?'
var d:String? = a! + b! + c!
                ~~~~~~~~^~~~

以前它可以迅速运行2。我不确定为什么它不再起作用了。


问题答案:

OP提交的错误报告:

  • SR-1122:无法对强制展开的值进行二进制运算符链的类型检查

该问题已解决(修复将于2017年1月3日提交给母版),因此在即将到来的Swift 3.1中不再是问题。

这似乎是与以下情况相关的错误(在Swift 2.2中仅存在于3.0中):

  • !在表达式中使用至少3个项的强制展开运算符()(使用至少2个基本运算符(例如+-)进行测试。
  • 出于某种原因,鉴于上述原因,Swift弄乱了表达式的类型推断(特别是对于x!术语本身,在表达式中)。

对于以下所有示例,让我们:

let a: String? = "a"
let b: String? = "b"
let c: String? = "c"

存在的错误:

// 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

错误不存在:

/* 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!)

但是,由于这是Swift 3.0- dev
,因此我不确定这是否确实是“错误”,以及不确定在尚未生产的代码版本中报告“错误”的政策是什么,但是您可能应该提起诉讼为此,以防万一。

至于如何规避此问题,请回答以下问题:

  • 使用例如 不存在的Bug中的 中间变量 上面的 示例2
  • 或明确告诉Swift 3项表达式中的所有项都是字符串,如 不存在的Bug: 上面的 示例3
  • 或者,更好的是,对您的可选对象使用 安全的展开 ,例如,使用 可选绑定
        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   */


 类似资料:
  • 我必须生成字符串命令来使用微控制器配置设备,因此需要C风格的字符串而不是常规的。 每一步都需要按enter键或是/否enter键,我需要为每一步输入一行代码。代码示例: 我可以设法减少重复LOC的数量吗?

  • 问题内容: 我正在尝试连接Java中的字符串。为什么这不起作用? 问题答案: 你可以使用运算符来连接字符串: 被隐式转换为。

  • 问题内容: 如何在Swift中连接字符串? 在我们喜欢 要么 但是我想用Swift语言做到这一点。 问题答案: 您可以通过多种方式连接字符串: 您也可以这样做: 我相信还有更多方法。 描述位 创建一个常数。(有点像)。设置后就无法更改其值。您仍然可以将其添加到其他东西并创建新变量。 创建一个变量。(有点像),因此您可以更改其值。 注意 在现实中,并有 很大的不同 ,从和,但它可以帮助类比。

  • 我正在尝试用Java连接字符串。为什么这不起作用?

  • 问题内容: 我有四个字符串,其中任何一个都可以为空。我需要将它们连接成一个字符串,并在它们之间留有空格。如果我使用: 如果为空,结果将是新字符串开头的空白。另外,如果和为空,则我有三个空格。 当我不需要空格时,如何轻松地加入它们? 问题答案: 通过在调用中使用,它将删除所有虚假元素。

  • 问题内容: 我大量使用三元运算符,但似乎无法在内部相互堆叠多个三元运算符。 我知道堆叠多个三元运算符 会使代码的可读性降低, 但在某些情况下,我想这样做。 到目前为止,这是我尝试过的: 正确的语法是什么? 问题答案: 这些括号是我认为能带给您的。 尝试