如何将一个元组添加到Swift数组?

Fre*_*Lee 47 arrays tuples swift

我正在尝试将一个元组(例如,2项元组)添加到数组中.

var myStringArray: (String,Int)[]? = nil
myStringArray += ("One", 1)
Run Code Online (Sandbox Code Playgroud)

我得到的是:

无法找到接受提供的参数的'+ ='的重载


提示:我试图对每本参考书的'+ ='进行重载:

@assignment func += (inout left: (String,Int)[], right: (String,Int)[]) {
    left = (left:String+right:String, left:Int+right+Int)
}
Run Code Online (Sandbox Code Playgroud)

......但是没有做对.

有任何想法吗?...解?

Mik*_*lan 121

由于这仍然是谷歌在阵列中添加元组的最佳答案,因此值得注意的是在最新版本中情况略有改变.即:

在声明/实例化数组时; 该类型现在嵌套在大括号内:

var stuff:[(name: String, value: Int)] = []
Run Code Online (Sandbox Code Playgroud)

复合赋值运算符,+=现在用于连接数组; 如果添加单个项目,则需要嵌套在数组中:

stuff += [(name: "test 1", value: 1)]
Run Code Online (Sandbox Code Playgroud)

还值得注意的是,当append()在包含命名元组的数组上使用时,您可以将要添加的元组的每个属性作为参数提供给append():

stuff.append((name: "test 2", value: 2))
Run Code Online (Sandbox Code Playgroud)

  • 这给了我Swift 2.0中的麻烦 - 在`call```中````额外参数'值' (2认同)

Alv*_*son 12

你有两个问题.第一个问题,你没有创建一个"元组数组",你正在创建一个"可选的元组数组".要解决此问题,请更改此行:

var myStringArray: (String,Int)[]? = nil
Run Code Online (Sandbox Code Playgroud)

至:

var myStringArray: (String,Int)[]
Run Code Online (Sandbox Code Playgroud)

其次,你正在创建一个变量,但没有给它一个值.您必须创建一个新数组并将其分配给变量.要解决此问题,请在第一行之后添加以下行:

myStringArray = []
Run Code Online (Sandbox Code Playgroud)

...或者您可以将第一行更改为:

var myStringArray: (String,Int)[] = []
Run Code Online (Sandbox Code Playgroud)

在那之后,这条线路工作正常,您不必担心操作员超载或其他疯狂.你完成了!

myStringArray += ("One", 1)
Run Code Online (Sandbox Code Playgroud)

这是完整的解决方案.高达两行,一行甚至没有改变:

var myStringArray: (String,Int)[] = []
myStringArray += ("One", 1)
Run Code Online (Sandbox Code Playgroud)

  • 答案中,这个是最简单的,也是最有意义的.覆盖运算符是很少应该完成的,因为稍后阅读代码的人会说"WTF".至少在这种情况下,它处于预期的过载范围内. (2认同)

bud*_*ino 6

斯威夫特4解决方案:

// init empty tuple array
var myTupleArray: [(String, Int)] = []

// append a value
myTupleArray.append(("One", 1))
Run Code Online (Sandbox Code Playgroud)