Swift 4 Introduction系列1.5 — Swift数据类型元组
通过将2个或多个基本数据类型分组为单个复合数据类型来形成元组。 元组的每个元素可以是任何Swift基本数据类型。 元组中的每个元素之间的数据类型可以不同。 由于元组可以包含许多不同的类型,因此我们可以从任何类型的排列中创建元组。 元组不适合复杂和持久的数据结构。 对于复杂而持久的数据结构,我们应该使用结构或对象类。
要创建一个常量元组,我们使用相同的关键字let,然后使用关键字var来创建变量元组。 常量和变量的行为与Swift基本数据类型相同。 常量是不可变的,变量是可变的。
我们可以用字符串和整数组成一个元组,如下所示:
让contact =(“我的名字”,22341176)
要访问元组中的元素,我们使用从0开始的索引。
例:
0
接触1
像往常一样,我们也可以通过先声明一个元组来创建一个元组。 我们只需要将所有不同的数据类型放在方括号中即可,并用逗号将它们分开。
例:
让address1 :(字符串,字符串)
address1.0 =“ A座公寓”
address1.1 =“新泽西州”
地址1.0
地址1.1
请注意,尽管我们可以先声明常量而不分配数据。 这不是最佳实践。 为了声明常量,我们应该在同一条语句中声明并分配它们。 这是为了使我们的代码更安全。 我们只应声明元组,然后在绝对必要时分配数据。 对于变量,即使我们没有要输入的数据,也应首先声明和初始化变量。
创建元组变量的首选方法是使用以下方法同时创建和初始化变量。
var contact1 =(String(),Int())
contact1.0
contact1.1
contact1.0 =“这是一个测试”
contact1.1 = 2132
contact1.0
contact1.1
contact1.0 =“大卫”
contact1.1 = 76788779
contact1.0
contact1.1
对于元组中的每个元素,我们可以具有相同的数据类型。
var address2 =(Int(),Int(),Int())
地址2.0
地址2.1
address2.2address2.0 = 12
地址2.1 = 1231
地址2.2 = 987
地址2.0
地址2.1
address2.2address2.0 = 1
地址2.1 = 243
地址2.2 = 77234
地址2.0
地址2.1
地址2.2
创建元组的语法
let / var =(,…)
要么
var =((),…())
创建和声明使用无法推断的数据类型的元组。 使用以下语法:
let / var :(,…,)=(,…,)
为了使用多个变量构造一个元组,我们使用创建元组的语法,但是用变量替换值。
例:
让originalContactName =“汤姆森”
让originalContactNumber = 8273294
let newContactTuple =(原始联系人名称,原始联系人编号)
newContactTuple.0
newContactTuple.1
使用非标准数据类型构造元组
让element1:Int8 = 87
让element2:Character =“ a” let someTuples2 =(element1,element2)
更多示例:
让someNonStdTup:(UInt,Float,Int16,String)=(88,3.14,32,“标准和非标准数据的混合”)someNonStdTup
要将元组解构为多个变量,我们使用以下语法:
let / var(,…,)=
请参见下面的示例:
让contact5 =(“ Steve”,81729382)
contact5.0
contact5.1let(contactName,contactNumber)= contact5
联系人姓名
联系电话
解构元组时,如果不需要元素,可以使用_。
例:
让someTuple1 =(123,1324,323,545)
let(getfirstNumber,_,_,_)= someTuple1
getfirstNumberlet(_,_,getThirdNumber,_)= someTuple1
getThirdNumberlet(_,getSecondNumber,_,getLastNumber)= someTuple1
getSecondNumber
getLastNumber
我们还可以创建元组并标记元组中的每个元素。 这有助于轻松识别或引用元素,而不是使用索引号。
语法如下:
let / var =(:,…,:)
要么
var =(:(),…,:())
通过创建带有标签的元组,我们总是可以使用带标签的名称而不是索引来引用元组的元素。
例:
let contact7 =(名称:“艾伦”,电话:18273949)
contact7.name
contact7.numbervar contact8 =(名称:字符串(),数字:整数())
contact8.name
contact8.number
contact8.name =“吉米”
contact8.number = 82736422
contact8.name
contact8.number
下面的示例总结了创建和声明元组的不同方法:
//完整的元组创建
//通过推论创建元组
让contactBook1 =(“ name”,2837993)
contactBook1.0
contactBook1.1var contactBook2 =(“第二名”,823874)
contactBook2.0
contactBook2.1 //创建不包含数据的元组
var contactBook3 =(String(),Int())
contactBook3.0
contactBook3.1 //对于常量(不是鼓励),请在绝对必要时使用
让我们不鼓励ContactBook4:(String,Int)
notEncourageContactBook4.0 =“某些名称”
notEncourageContactBook4.1 = 827374623 //创建带有标签的元组
var contactBook5 =(name:String(),phone:Int())
contactBook5.name
contactBook5.phone
contactBook5.name =“其他名称”
contactBook5.phone = 87232456 //具有非标准数据类型的元组创建,无数据类型推理集someTuples1:(Int16,Float)=(12,3.4)
someTuples1.0
someTuples1.1let secretContactBook1:(Character,Int16)=(“ A”,877)
secretContactBook1.0
secretContactBook1.1var secretContactBook2 :(秘密:字符,代码:Int16)=(“”,Int16())
secretContactBook2.secret
secretContactBook2.code
secretContactBook2.secret =“ q”
secretContactBook2.code = 236
//注意数据类型字符不能使用Character()初始化
我们可以像其他基本数据类型一样,将元组的值传递给新的变量或常量。
例
让someTuple2 =(名称:“理查德”,编号:298323,社会保险:834783748374,地址:“ 123 street Apartment A”)
var someTuple3 = someTuple2someTuple3.number
someTuple3.number = 87777767var someTuple5 =(名称:“”,数字:0,socialSecurity:64,地址:“ A”)
someTuple5 = someTuple3
如果要将值从一个变量传递给另一个变量,则必须确保两个变量中的数据类型都匹配并且顺序相同。
例:
让someT1 =(12,54)
一些T1.0
someT1.1var someT2 =(0,0)
一些T2.0
someT2.1someT2 = someT1
一些T2.0
一些T2.1
另一个例子:
var someT3 =(123,“ test”,183,823.0)
var someT4 =(0,“”,0,0.0)
someT4 = someT3
一些T4.0
someT4.1
一些T4.2
一些T4.3
我们可以分配或更改单个元素,如下所示:
//以下示例是上一个示例的延续
让tempDouble1 = 283.9
一些T4.3
someT4.3 = tempDouble1
一些T4.3
如果我们要标记元组元素,则要将值从一个变量传递到另一个变量,不仅数据类型必须匹配,而且标记的也必须相同。
让我们考虑以下示例:
让someTuple11 =(a:87,b:897)var someTuple12 =(s1:0,s2:0)var someTuple13 = someTuple11someTuple13.asomeTuple13.b
变量someTuple12和someTuple13具有相同的数据类型,但每个变量的名称不同。 如果我们要将someTuple13分配给someTuple12,则系统将生成如下所示的错误:
但是,我们可以将值明智地传递给其他元素:
// someTuple12 = someTuple13
//但是,我们可以明智地传递值元素
someTuple12.s1 = someTuple13.a
someTuple12.s2 = someTuple13.b
如果我们要创建另一个与数据类型和名称匹配的变量,则可以通过将元组传递给另一个变量来传递值
//从先前的代码继续
var someTuple14 =(a:0,b:0)
someTuple14 = someTuple13
someTuple14.a
someTuple14.b
另一个例子:
let someTuple20 =(名称:“理查德”,编号:298323,社会保险:834783748374,地址:“ 123 street Apartment A”)
var someTuple21 = someTuple20someTuple21.number
someTuple21.number = 87777767var someTuple22 =(名称:“”,数字:0,socialSecurity:64,地址:“ A”)
someTuple22 = someTuple21
- 元组被设计为临时持有人,以持有一堆相关价值。
- 对于C程序员,尽管元组与struct类似,但它打算用作临时值持有人。 Swift还支持更强大的struct。
- 当我们想要传递一个具有多个返回变量的函数时,元组非常有用。
使用带倍数返回的函数的示例
func getMultiData()->(Int,String){
设a = 123
让b =“ someTest”
返回(a,b)
}让getData = getMultiData()
getData.0
getData.1
最初于 2018 年4月19日 发布在 blog.swifticode.com 上。