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 

变量some​​Tuple12和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 上。