Welcome to Swift (苹果官方Swift文档初译与注解二十一)---140~147页(第三章--集合类型)

   2023-02-08 学习力0
核心提示:    第三章Collection Types (集合类型)  在Swift中,提供了两种集合类型用来存储一组值:数组和字典.数组有序的存储相同类型的值;字典存储无序的相同类型的值.字典可以通过唯一的标识(就是所说的键)来查询和访问.  在Swift中,数组和字典总是要清晰的标

    第三章

Collection Types (集合类型)

  在Swift中,提供了两种集合类型用来存储一组值:数组和字典.数组有序的存储相同类型的值;字典存储无序的相同类型的值.字典可以通过唯一的标识(就是所说的键)来查询和访问.

  在Swift中,数组和字典总是要清晰的标明他们存储数据的类型.这就意味着不可以将错误的类型插入到数组或字典中.同时也意味着你是明确了解你要遍历的数组或字典里面数据的类   型.在Swift中,集合要显式的声明类型来保证在开发中都会明确的知道它能处理的数据类型.

  注意点:

  在Swift中,数组(Array)被赋值或者被传递给函数或方法时,会与其他类型有不所同的.

Arrays (数组)

  数组可以顺序的储存一组相同类型的值.相同的值可以在数组的不同位置出现多次.

  在Swift中,数组是存储指定的某种类型值.这与OC中的NSArray类和NSMutableArray类不同,OC中他们可以存储不同类型的值.在Swift中,数组存储的值的类型必须明确.如果你声明  了一个Int的数组,你不可以存储Int类型之外的值.在Swift中,数组是类型安全的,并且要明确声明它存储值的类型.

Array Type Shorthand Syntax (数组类型缩写语法)

  在Swift中,数组的完整写法是:Array<SomeType>,这里的SomeType是数组可以存储的类型.数组也可以使用缩写的方式: SomeType[].尽管这两种形式在功能上是相同的,但我们推  荐使用缩写.本手册中都会使用缩写方式.

Array Literals (文本数组)

  文本数组是在中括号[]中使用逗号(,)分隔开的一列值,并可以使用文本对数组进行初始化操作:

    [value 1, value 2, value 3]

  下面的代码例子中,创建了一个叫做shoppingList的数组来存储字符串(String)类型的值:

    var shoppingList: String[] = ["Eggs", "Milk"]

    // shoppingList 通过两个字符串元素进行初始化

  通过 String[]的写法,使变量 shoppingList被定义为字符串类型的数组.因此数组只能存储Striing(字符串)类型的值.这里,数组 shoppingList通过两个String类型值("Eggs" and "Milk")  来初始化.

  注意点:

  shoppingList数组被定义为变量(使用var关键字)而不是常量,是因为要在后面的代码例子中要给数组添加更多的元素.

  在这个例子中,文本数组包含两个String(字符串)类型的值.这与变量shoppingList的类型刚好匹配.因此通过使用两个字符串元素给数组赋值来作为一种数组初始化的方式是被允许的.

  由于在Swift中有类型预测机制,在使用文本内容的值来初始化文本数组的时候,可以不必写明数组的类型.因此,shoppingList的初始化可以被缩写为:

    var shoppingList = ["Eggs", "Milk"]

  因为在数组里的所有值都是同一种类型,Swift可以判断出变量 shoppingList的正确类型是 String[]

Accessing and Modifying an Array (数组的访问和修改)

  使用数值的方法和属性,可以访问和修改数组,或者使用数组下标进行.

  查看一个数组的元素个数,使用它的只读属性:count

    println("The shopping list contains \(shoppingList.count) items.")

    // prints "The shopping list contains 2 items.”

  使用布尔类型的属性isEmpty可以检测数组的count属性值是否等于0:

    if shoppingList.isEmpty {

        println("The shopping list is empty.")

    } else {

        println("The shopping list is not empty.")

    }

    // prints "The shopping list is not empty.”

  使用数组的append方法,可以添加一个新的元素到数组的最后面:

    shoppingList.append("Flour")

    // shoppingList now contains 3 items, and someone is making pancakes”

  或者,也可以使用复合赋值操作符(+=)给数组添加一个新元素在数组的末尾:

    shoppingList += "Baking Powder"

    // shoppingList now contains 4 items

  当然,你也可以使用复合赋值操作符(+=)添加一个相同元素类型的数组:

    shoppingList += ["Chocolate Spread", "Cheese", "Butter"]

    // shoppingList now contains 7 items

  从数组中提取一个值,使用下标:在数组名后面的中括号[]里,写上你需要提取值的索引

    var firstItem = shoppingList[0]

    // firstItem is equal to "Eggs”

  注意,数组的第一个元素的索引是0而不是1.在Swift中,所有数组都是以0开始的.

  可以通过下标来改变数组中相应索引的元素值:

    shoppingList[0] = "Six eggs"

    // the first item in the list is now equal to "Six eggs" rather than "Eggs”

  使用下标也可以改变数组中一定范围的值,甚至替换一组值,哪怕替换的长度与你指定的范围不相同.下面的代码例子将“Chocolate Spread", "Cheese", 和 "Butter" 替换      成"Bananas" 和"Apples":

    shoppingList[4...6] = ["Bananas", "Apples"]

    // shoppingList now contains 6 items”

  注意点:

  不可以使用下标的方式类给数组添加新的元素.如果你使用的数组下标超出了数组的边界,将会触发一个运行错误.其实你可以在使用下标之前,通过比较数组的count属性来检查下标索  引是否合法.除非数组的count值是0(这意味着数组是空的),否则数组最大的索引下标值总是count - 1,因为数组的索引是从0开始的.

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • swift 命令行工具初探
    亲爱的同学们好,今天我们要介绍这么一个东西。相信有过解释型语言(PHP,Ruby,等)使用经验的同学会更加熟悉,就是 Swift 也为我们提供了命令行运行工具,俗称 REPL。好了,我们进入正题,在安装好 Swift 开发环境的机器上,打开命令行,输入 swift 命令,就进
    03-16
  • [Swift]冒泡排序 | Bubble sort
    [Swift]冒泡排序 | Bubble sort
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文
    03-08
  • [Swift] 自定义在 SwiftUI 中实现的可搜索的外观
    [Swift] 自定义在 SwiftUI 中实现的可搜索的外
    首先我找遍了,似乎找不到任何信息......(我遇到了许多根本不起作用的事情......)终于在详细的英文文献中找到了,我会保留下来,希望以后有机会。关于 SwiftUI 中的可搜索searchable是iOS15新增的易于实现的搜索字段。关于这种情况有一个参数placement,您
    03-08
  • [Swift] 检测 SwiftUI ScrollView 中的偏移量
    [Swift] 检测 SwiftUI ScrollView 中的偏移量
    首先你可以用ScrollViewReader做一些可以从iOS14使用的事情。但是,我不能做我想做的事情,所以我想我还能做些什么。再次,可重复使用我尝试过了。执行我将首先发布实现的图像。 (Swift Playgrounds 演示)您可以像这样根据滚动获取坐标。让我们看看实现。1.
    03-08
  • Swift3.0 UICollectionView 删除,拖动
    Swift3.0 UICollectionView 删除,拖动
    UICollectionView实现了一下常见的新闻分类.  附有效果图 近期一直在深入学习swift,实现了CollectionView item的头东与删除,用的都是系统的一些函数方法,看起来比较直观. 第一步:class HotViewController: UIViewController,UICollectionViewDelegate,UICo
    02-09
  • swift -懒加载创建view
     // 只有外界访问到headerView的时候才会去执行闭包, 然后将闭包的返回值赋值给headerView    // 注意: 一定要记住闭包后面需要写上(), 代表执行闭包    //懒加载创建UIView    lazy var headerView: UIView = {        let view = UIView()
    02-09
  • Swift--非常好用的适合局部的代码约束
    // 哪个控件的哪个属性等于(大于、小于)另外一个控件的哪个属性乘以多少再加上多少 eg:let widthContraint = NSLayoutConstraint(item: messageLabel, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLa
    02-09
  • iOS打包framework - Swift完整项目打包Framework,嵌入OC项目使用
    iOS打包framework - Swift完整项目打包Framewor
    场景说明:-之前做的App,使用Swift框架语言,混合编程,内含少部分OC代码。-需要App整体功能打包成静态库,完整移植到另一个App使用,该App使用OC。-所以涉及到一个语言互转的处理,以及一些AppDelegate的代码减除变化。 --------------------------------
    02-09
  • Swift -- 官方文档Swift-Guides的学习笔记
    在经历的一段时间的郁闷之后,我发现感情都是虚伪的,只有代码是真实的(呸)因为看了swift语法之后依然不会用swift,然后我非常作死的跑去看官方文档,就是xcode里自带的help》documentation and API reference其中的swift里的guide这里主要总结一下里面每一
    02-09
  • Swift - 进度条(UIProgressView)的用法
     1,创建进度条1234var progressView=UIProgressView(progressViewStyle:UIProgressViewStyle.Default)progressView.center=self.view.centerprogressView.progress=0.5 //默认进度50%self.view.addSubview(progressView); 2,设置进度,同时有动画效果1p
    02-09
点击排行