该书“迅速。 为iOS,iPadOS和macOS开发应用程序的基础。 第五版。 补充和修订的“

图片 嗨,habrozhiteli! 尽管已经形成了编程和开发的基本方法,但是Swift语言还是年轻的,它不断发展,发展和变化。 在新的第五版中,对本书的第一部分进行了完全修订,使对Swift语言的认识更加自如,并且根据Swift 5的功能对全文进行了更新。在与读者的漫长而卓有成效的交流中,出现了许多想法,并因此有了新的版本。甚至更多有用和丰富的教育资料。 现在,您不仅将学习Swift,而且还将获得有关开发成熟应用程序原理的初步信息。 Swift的世界在不断变化,由于语言的年龄,拥有大量知识和经验的人还不存在,因此您可以成为第一批专家。

摘录。 第6章元组


您可能从未在编程中遇到过元组这样的概念,但是,这是Swift中可用的非常有用的功能之一。 例如,元组可用于处理坐标。 同意,使用写在一个变量中的构造(x,y,z),比为每个坐标轴创建一个单独的变量要方便得多。

6.1。 元组基础


元组是将单个复合值内的各种类型的值分组的对象。

元组是Swift可以组合任意类型的值的最简单方法。 元组中的每个单独的值都可以具有自己的数据类型,该数据类型不以任何方式依赖于其他值。

车队文字


可以使用元组文字创建一个元

句法

(_1, _2, ..., _N) 

•value:任意-包含在元组中的任意数据类型的下一个值。

元组字面量返回其中定义为元组的值。 文字用括号括起来,由一组独立的值组成,并用逗号分隔。 元素的数量可以是任意的,但建议不要使用七个以上的元素。

注意

沿着文本,将有大量的语法块。 他们描述了有关结构如何在实际程序中使用。 在进行这些块之前,有必要描述该块的结构以及所使用的元素。

第一行将始终直接确定描述程序代码中构造用法的语法本身。 在这种情况下,可以使用条件元素(例如,上面语法中的value_1,value_2和value_N)。 通常,它们以文本形式编写以了解其目的。

条件元素的详细描述如下。 在某些情况下,可以对元素进行分组(如上述语法所示,其中描述元素值而不是元素value_1,value_2等,其要求适用于具有给定名称的所有元素)。

在条件元素的名称之后,可以指示其数据类型。 此外,如果应使用某种类型的特定值(例如,字符串,数字,逻辑等)作为元素,则该类型用冒号(:)分隔。 但是,如果可以将表达式用作元素(例如a + b或r> 100),则将在表示箭头(->)的破折号和直角括号后指示类型。 可以将其定义为一种(例如Int)和许多数据类型(例如Int,String)。

上面的语法使用Any作为指向数据类型的指针。 任何代表任何数据类型。 在学习过程中,您会遇到越来越多的可以在此语法块中指定的类型。

语法的详细说明及其用法的示例如下。
我建议您将此页面添加为书签,以便在必要时
总是回到这里。
元组以与基本数据类型的值相同的方式存储在变量和常量中。
句法

 let  = (_1, _2, ..., _N) var  = (_1, _2, ..., _N) 

声明一个变量和一个常量,并使用由N个元素组成的元组文字对其进行初始化。 要将元组写入变量,必须使用var语句,而要写入常量,则必须使用let语句。
考虑以下示例。 我们声明一个常量,并使用一个由三个类型元素组成的元组对其进行初始化:Int,String和Bool(清单6.1)。

清单6.1

 let myProgramStatus = (200, "In Work", true) myProgramStatus // (.0 200, .1 "In Work", .2 true) 

在此示例中,myProgramStatus是一个常量,其中包含一个元组作为描述某个程序状态的值,并且由三个元素组成:

  • 200-Int类型的整数,程序状态代码;
  • “在工作中”-类型为String的字符串文字,是程序状态的文字描述;
  • true-Bool类型的逻辑值,具有继续执行程序的能力。

该元组将三个不同数据类型的值组合在一个初始化的常量中。

元组数据类型


但是,如果一个元组将各种数据类型的值组合为一个,那么元组本身的数据类型和存储其值的参数是什么?

元组数据类型是元组元素的固定的,有序的数据类型名称序列。
句法

 (____1, ____2, ..., ____N) 

数据类型括在括号中,元素类型名称用逗号分隔。 类型名称的顺序必须与元组中元素的顺序相对应。

例子


 (Int, Int, Double) 

清单6.1中的myProgramStatus元组的数据类型为(Int,String,Bool)。 数据类型是隐式设置的,因为它是根据元组的元素自动确定的。 由于指定数据类型的顺序必须与元组中元素的顺序相对应,因此类型(Bool,String,Int)与(Int,String,Bool)不同。

清单6.2比较了各种元组的数据类型。

清单6.2

 var tuple1 = (200, "In Work", true) var tuple2 = (true, "On Work", 200) print( type(of:tuple1) == type(of:tuple2) ) 

主控台

 false 

为了比较元组的数据类型,使用了由全局函数类型(of :)返回的值,该函数确定传递给它的对象的类型。
假设在myProgramStatus元组中,第一个元素应该是Float值,而不是整数。 在这种情况下,您可以显式确定元组的数据类型(参数名称后的冒号)(清单6.3)。

清单6.3

 //       let floatStatus: (Float, String, Bool) = (200.2, "In Work", true) floatStatus // (.0 200.2, .1 “In Work”, .2 true) 

您不限于任何特定数量的元组元素。 元组可以包含所需的任意多个元素(但请记住,建议不要使用七个以上的元素)。 清单6.4显示了创建由四个相同类型的元素组成的元组的示例。 它使用Int数据类型的别名,这是不被禁止的。

清单6.4

 //     Int typealias numberType = Int //       let numbersTuple: (Int, Int, numberType, numberType) = (0, 1, 2, 3) numbersTuple // (.0 0, .1 1, .2 2, .3 3) 

6.2。 与元组元素的交互


元组不仅用于设置和存储一组特定的值,而且还用于与这些值进行交互。 在本节中,我们将讨论如何与元组元素的值进行交互。

将值初始化为参数


您可以使用一个表达式声明新参数,并在其中初始化元组所有元素的值。 为此,请在方括号中用var关键字(或者,如果声明常量,则用逗号表示)之后,必须指定新参数的名称,并在初始化运算符之后传递元组。 请注意,已声明参数的数量必须与元组元素的数量匹配(清单6.5)。

清单6.5

 //      var (statusCode, statusText, statusConnect) = myProgramStatus //   print("  — \(statusCode)") print("  — \(statusText)") print("   — \(statusConnect)") 

控制台:

 200In Worktrue 

使用此语法,您可以轻松地一次将任意值初始化为多个参数。 为此,在表达式的右侧,在初始化运算符之后,不必传递包含元组的参数,而是传递元组文字(清单6.6)。

清单6.6

 /*         */ var (myName, myAge) = ("", 140) //    print("  \(myName),   \(myAge) ") 

控制台:

   ,   140  

变量myName和myAge用元组元素的相应值初始化(Troll,140)。 使用此语法,您可以忽略任意元组元素。 为此,必须指定下划线字符作为与要忽略的元素相对应的变量的名称(清单6.7)。

清单6.7

 /*      */ var (statusCode, _, _) = myProgramStatus 

结果,元组的第一个元素myProgramStatus的值被写入statusCode变量。 其他值将被忽略。

注意

Swift中的下划线表示忽略该参数。 这不是可以使用它的唯一示例。 将来,在学习本书的材料时,您将不止一次与他会面。

通过索引访问元组元素


元组的每个元素除值外,还包含一个可用于访问此元素的整数索引。 索引始终从零开始按顺序排列。 因此,在N个元素的元组中,第一个元素的索引将为0,而最后一个元素可以使用索引N-1进行访问。

访问单个元素时,在元组所存储的参数名称之后通过点表示索引。 清单6.8显示了访问元组的各个元素的示例。

清单6.8

 //      print("   — \(myProgramStatus.0)") print("   — \(myProgramStatus.1)") print("    — \(myProgramStatus.2)") 

控制台:

 200In Worktrue 

通过名称访问元组元素


除了索引之外,还可以为元组的每个元素分配一个唯一的名称。 元素名称不是必需的,仅用于方便使用元组。 可以为每个人和部分元素命名。 元素名称既可以在元组文字中定义,也可以通过显式定义其类型来定义。

清单6.9显示了通过文字确定元组元素名称的示例。

清单6.9

 let statusTuple = (statusCode: 200, statusText: "In Work", statusConnect: true) 

指定的元素名称可用于获取这些元素的值。 在这种情况下,使用通过参数名称后面的点指定索引时与通过索引访问时相同的语法。 定义名称不会阻止您使用索引。 元组中的索引始终可以使用。

清单6.10显示了元素名称如何与索引一起使用。

清单6.10

 //      print("   — \(statusTuple.statusCode)") print("   — \(statusTuple.statusText)") print("    — \(statusTuple.2)") 

控制台:

 200In Worktrue 

使用名称访问元素比通过索引访问元素更方便,更直观。
如前所述,元素名称不仅可以在元组文字中指定,还可以在显式确定数据类型时指定。 清单6.11显示了相应的示例。

清单6.11

 /*          */ let anotherStatusTuple: (statusCode: Int, statusText: String, statusConnect: Bool) = (200, "In Work", true) //    anotherStatusTuple.statusCode // 200 

元组编辑


对于相同类型的元组,可以执行将一个元组的值初始化为另一个的操作。 考虑清单6.12中的示例。

清单6.12

 var myFirstTuple: (Int, String) = (0, "0") var mySecondTuple = (100, "") //       myFirstTuple = mySecondTuple myFirstTuple // (.0 100, .1 "") 

元组myFirstTuple和mySecondTuple具有相同的数据类型,因此一个值可以初始化为另一个。 第一种类型是显式设置的,第二种是通过初始化值设置的。
索引和名称可用于更改元组中单个元素的值(清单6.13)。

清单6.13

 //   var someTuple = (200, true) //     someTuple.0 = 404 someTuple.1 = false someTuple // (.0 404, .1 false) 

元组在Swift中非常普遍。 例如,在他们的帮助下,您可以轻松地从函数中返回一个值,而不是多个值(稍后我们将熟悉函数)。

注意


元组不允许您创建复杂的数据结构,它们的唯一目的是对一组特定的异构或相似参数进行分组并将它们传输到所需的位置。 要创建复杂的结构,必须使用面向对象编程(OOP)的工具,更具体地说,使用类或结构。 我们稍后会认识他们。

»这本书的更多信息可以在出版商的网站上找到
» 目录
» 摘录

Swabbrookers优惠券有25%的折扣-Swift

支付纸质版本的书后,就会通过电子邮件发送电子书。

Source: https://habr.com/ru/post/zh-CN469187/


All Articles