无论如何都要向元组添加新元素吗?
var tuple = (v1: 1,v2: 2)
tuple.v3 = 3 // Error
“错误:元组类型的值'(v1:Int,v2:Int)'没有成员'v3'”
答案 0 :(得分:6)
没有。具有不同数量的元素或不同类型的元素的每个元组在Swift
类型系统中表示不同的类型。因此,一旦你创建了一个元组,就不能向它添加元素,因为这会改变元组的类型。
元组及其类型的一些基本示例:
let tupleWithTwoInts = (1,2) //has type (Int,Int)
let tupleWithThreeInts = (1,2,3) //has type (Int,Int,Int)
let tupleWithTwoStrings = ("a","b") //has type (String,String)
let tupleWithIntAndString = (1,"a") //has type (Int,String)
let tupleWithStringAndInt = ("a",1) //has type (String,Int)
即使元素的顺序也会对元组的类型产生影响。
type(of: tupleWithIntAndString) == type(of: tupleWithStringAndInt) //false
答案 1 :(得分:3)
如果你只需要支持一些少量的操作,那么你可以为它编写一个函数。
例如,将2D矢量扩展为3D:
func expand(_ v: (x: Int, y: Int), z: Int) -> (x: Int, y: Int, z: Int) {
return (x: v.x, y: v.y, z: z)
}
答案 2 :(得分:0)
虽然没有如上所述的将数组转换为元组的可扩展方法,但是如果由于要制作可重用的组件而遇到此问题,并且喜欢可变参数声明可以提供的便利,则可以移动方法主体放入一个采用数组的变量,并让您的可变参数声明成为同一方法的替代包装。
此
func buttonModels(_ buttonModels: ButtonModel...) {
self.buttonModels = buttonModels
}
成为:
func buttonModels(_ buttonModels: ButtonModel...) {
self.buttonModels(buttonModels)
}
func buttonModels(_ buttonModels: [ButtonModel]) {
self.buttonModels = buttonModels
}
答案 3 :(得分:-3)
在我看来,你正在寻找使用字典,而不是元组。请参阅文档:Tuple
编辑:正如所指出的,如果将元组声明为var并且可用于保存可编辑数据,则元组确实可以是可变的。我的坏!