探讨Swift数组和字典

论坛 期权论坛 脚本     
niminba   2021-5-23 03:43   1562   0

数组是一个存储多个相同类型的值的有序列表。相同的值,可以在不同的位置出现在一个数组中的多个次。
Swift数组是具体的。他不同于Objective-C的的NSArray和NSMutableArray里的类,它可以存储任何类型的对象,不提供有关它们返回的对象的性质的任何信息。在斯Swift,一个特定的数组可以存储的值类型总是明确的,无论是通过显式类型批注,或通过类型推断,而不一定是类类型。如果创建诠释值的数组,例如,你不能插入比Int值以外的任何值到该数组。Swift数组是类型安全的,并且总是清楚它们可能含有什么。

数组语法

数组的类型是Array<SomeType>,其中个SomeType是该数组允许存储的类型。你也可以写简写形式数组的类型为个SomeType[]。虽然两种形式在功能上是相同的,简写形式是首选,而指的是一个数组类型时使用本指南。

说到数组和字典,只要是编过程的小伙伴并不陌生。在Swift中的数组与字典也有着一些让人眼前一亮的特性,今天的博客就来窥探一下Swift中的Array和Dictionary。还是沿袭之前的风格,在介绍Swift中的数组时,我们会对比一下ObjC中的数组和字典,因为ObjC也是iOS开发的主要语言不是。无论是简单还是复杂的程序,数组和字典的用处还是比较多的,这两者虽然是Swift的基础内容,但是也不失其重要性。关于Objc的集合类请参考之前的博客《Objective-C中的集合类》。

  一、Swift中的数组(Array)

    数组在其他编程语言中都是存在的,数组就是一组数的集合。虽然其他编程语言中都有数组,但是不同语言中的数组都有着一些属于自己的特性。Swift也不例外,Swift中的数组使用起来还是比较人性化的.

    1.数组的声明与创建

    在聊Swift中的Array声明创建之前,我想聊一下ObjC中数组的声明与创建,下方是ObjC中不可变数组和可变数组的创建方式。在ObjC中可以使用NSArray来声明不可变数组,使用NSMutableArray来声明可变数组。

 NSArray *objcArray = [NSArray array];
   NSArray *objcArray = @[@(), @()];
   NSMutableArray *mutableArray = [NSMutableArray array]; 

    而在Swift语言中,你可以使用关键字let来声明不可变数组,使用var来声明可变数组,下方代码声明的是Swift中的可变数组的几种方式。有一点需要注意的是ObjC中的数组只允许往里面存储对象,而不允许往里存储基本数据类型(Int, Float等)。而在Swift中是允许把基本数据类型存入数组中的,如下方代码段所示。下方给出了数组的三种定义的方式。后两种给数组元素制定了数据类型,表示该数组中只能够存储Int类型的值,如果你往里存入了其他的值,对不起,编译器会报错的。

    在Swift的数组中,如果在声明数组时没有指定数组中元素的数据类型,那么数组中是可以存放不同数据类型的数据的。如果你指定了数组中只允许存储一种数据类型,如果你再往里存储其他数据类型的话,那就是你的不对了,编译器回给你指出你的错误。具体如下所示:

 

  2.数组的操作

    (1)可变与不可变数组

    如果你想对数组中的元素进行增加、修改或者删除,那么你需要把Array定义成可变数组。如果你把数组定义成了不可变数组,但是你又对他进行了操作,那就是你的不对了。无论是ObjC还是Swift都不允许对不可变数组这位高冷的“御姐”动手动脚,不然会抛出一个错误的。但是可变数组就不一样了,你可以对可变数组进行增删改查操作。

    下图是在ObjC中对NSArray操作后的结果,你不能对NSArray中的元素进行修改,也就是说你对NSArray的操作权限只有读的权限,没有写的权限。如果你想对数组进行读写的权限的话,那你就有必要使用可变数组NSMutableArray了。使用NSMutableArray就不会报错,因为你对它有读写的权限。

    在Swift中的可变数组和不可变数组归根结底还是变量和常量也就是var和let关键字的使用了。你对变量持有读写的权限,对常量持有读的权限。下方的小实例,本质还是对let和var的讨论,下方曢[4(4("G>kj>[魕疾SjZb"">[sowJ3swj &h4(4(е聍顽4(_7:4(4(>>[k"/v_7:ZW Z7:_&r'j3_b:>[_&r'j4(4(е聍顽4(zs zs>~?b>'z/jV64(4(=4(=4(=4(4(vb:>[_j&r% vb:>[_j&r% &h4(е聍顽啉ш4(jzs4(4(驅4(4(?(4(4(:vb疶_V7:?7:b j 7:j"G>kRj?v:>[_1  &h4(4(е聍顽4(zs 4(驅4(4(4(胦(4(4(胖(4(4(胖4(_4(4(_jbS6Wj/Zk7 7bkj?n:疾Sj7Z?bSn{j 4(4(е聍顽4( zsr^gj:/wrYZWj b>j:/{&h4(4(е聍顽4(Ф{*4(4(r'j>>c_{*6Wk:k>r>>c_ zqcr>c"Cvj_ >Bk zq疶crn[:r'jR zscr* Zǚb*j>4(е聍顽ь4(4(4(Znb&r'_jZW4(4(&r'4(4(&r' zqg_r'jc 4(4(Y!胢ZWbkvj4(4(е聍顽4(%!Ygbkj"fj _br'?j"G;:>[% "G>ǚb  "C*B;j?"fj4(4(е聍顽ь4(

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP