相关文章
Swift快速入门(一)第一个Swift程序
Swift快速入门(二)基本数据类型
Swift快速入门(三)运算符
Swift快速入门(四)流程控制

前言

Swift提供了数组和字典两种集合类型来存储数据,Swift的数组用来存储顺序相同类型相同的类型,字典则采用kay-value的形式存储数据。

1.数组

数组用来存储同一个数据类型的多个数据,通常可通过数组元素的索引来访问数组元素。

声明数组

声明数组有两种语法:

  1. 使用泛型语法。格式为:Array<类型>
  2. 使用简化语法。格式为:[类型]
// 使用泛型语法声明数组
var arr : Array<String>
// 使用简化语法声明数组
var names : [String]

创建数组

创建数组也有两种方式:
1. 使用Array的构造器创建数组
2. 使用简化语法创建数组

// 创建一个空数组,并将该空数组赋值给myArr变量
arr= Array<String>()
// 创建一个包含10个"moon"元素的数组,并将该数组赋值给names变量
names = Array<String>(count: 10,repeatedValue: "moon")

// 使用简化语法创建数组,并将数组赋值给values变量
var values = ["2","3","4","5","6"]

遍历数组

普通的循环遍历数组:

for var i = 0; i < values .count ; i++
{ print(values[i]) }

for-in循环遍历数组:

for value in values{
//会报错"canot assign to value:'value' is a 'let'...
//value="5"
print(value)
}

需要注意的是,在使用for-in循环遍历是,不允许对循环常量进行赋值,因为for-in循环隐式的用let来声明了该常量。

修改数组

Array提供了append()方法来添加元素:

// 使用var定义一个可变数组
var languages = ["Swift"]
// 添加元素,输出为["Swift","Java"]
languages.append("Java")

还可以用”+“来进行数组的的加法运算:

//输出为["Swift","Java","Ruby"]
languages=languages+["Ruby"]

Array提供了insert()方法来添加元素:

// 插入元素,这时数组第一个元素为"Go"
languages.insert("Go",atIndex:0)

Array支持在”[]”中使用Range,这样可以一次性获取和赋值多个数组元素:

var languages = ["Swift","OC","PHP","Perl","Ruby","Go"]
// 获取languages中数组中索引为1~4的元素
let subRange = languages[1..<4]
print(subRange)  // 输出[OC,PHP,Perl]
// 将languages中数组中索引为2~4的元素替换成"C/C++","Python"
languages[2...4] = ["C/C++","Python"]
print(languages)  // 输出[Swift,OC,C/C++,Python,Go]
// 清空数组
languages[0..<languages.count] = []
print(languages)  // 输出[]

Array提供了removeAtIndex()、removeLast()和removeAll()方法来进行删除:

var languages = ["Swift","Go"]
// 删除索引为2的元素,删除"PHP"
languages.removeAtIndex(2)
print(languages)  // 输出[Swift,Perl,Ruby,Go]
// 删除最后一个元素,删除"Go"
languages.removeLast()
print(languages)  // 输出[Swift,Ruby]
// 删除所有元素
languages.removeAll()
print(languages)  // 输出[]
print(languages.count)  // 输出0

2.字典

字典用于保存具有映射关系的数据,key和value都可以是任何数据类型的的数据,其中字典的key不允许重复。

声明字典

声明字典有两种语法:
1. 使用泛型语法,格式为:Dictionary

// 使用泛型语法声明字典
var dict : Dictionary<String,String>
// 使用简化语法声明字典
var scores : [String:Int]

创建字典

同样的创建字典也有两种方式:

  1. 使用Dictionary的构造器
  2. 使用简化语法
// 创建一个Dictionary结构体,使用默认的参数
dict = Dictionary<String,String>()
// minimumCapacity至少包含键值对的个数,默认值为2
scores = Dictionary<String,Int>(minimumCapacity:5)
// 使用简化语法创建字典
var health = ["身高":"178","体重":"75"]

使用字典

访问字典的value需要在字典变量后紧跟一个方括号”[]”就可以了,方括号里是字典value对应的key值。

//将key值赋值给height 
var height = health["身高"]
print(height) // 输出Optional("178")
// 访问并不存在的key对应的value时,将会返回nil
var energy = health["能量"]
print(energy)  // 输出nil

从上面的代码可以看出,根据key值访问字典对应的value时,返回的是包含value值的可选类型,因为字典不确定是否这个键值对存在,当键值对存在时则返回key对应的value,否则就返回nil。这时我们可以通过强制解析来解决这个问题:

//height的类型是String?,而不是String
var height : String? = health["身高"]
if height != nil
{
    // 使用!执行强制解析,输出为178
    print(height!)
}

for-in循环同样可以用来遍历字典:

for heal in health
{
 print(heal) //输出 ("身高",178) ("体重",75)

}

字典的key集和value集

如果程序只需要访问字典的key集和value集,只需要访问字典的keys属性或者values属性。

var healths = ["身高":"178","体重":"75"]
var keys=Array(healths.keys)
var values=Array(healths.values)
print(keys) //输出["身高","体重"] 
print(values)//输出["178","75"]

修改字典

字典提供了updataValue()方法来修改字典的value值,该方法会返回一个Sting?类型的值,如果key值存在则修改成功,如果key值不存在则返回nil,但会新增一个key-value值

var healths = ["身高":"178","体重":"75"]
var result=healths.updateValue("68",forKey:"体重")
print(result) // 输出Optional("75")
print(health) // 输出["身高":"178","体重":"68"]
var result=healths.updateValue("A",forKey:"血型")
print(health) // 输出["血型":"A","身高":"178","体重":"68"]

字典还提供了如下的方法来删除元素:

  1. removeValueForKey:删除指定key对应的value
  2. removeAll:清空字典
var languages = ["Swift":9000,"OC":8600,"PHP":3400,"Perl":4300,"Ruby":5600,"Go": 5600]
// 删除key为"PHP"的key-value对
languages.removeValueForKey("PHP")
// 删除key为"Perl"的key-value对
languages.removeValueForKey("Perl")
// 下面输出:[Go: 5600,OC: 8600,Ruby: 5600,Swift: 9000]
print(languages)
print(languages.count)  // 输出4

还可以将Key对应的Value值赋值为nil来删除该key-value对:

// 删除key为"Go"的key-value对
languages["Go"] = nil
print(languages)  // 输出[OC: 8600,Swift: 9000]
// 删除所有元素
languages.removeAll()
print(languages)  // 输出[:]
print(languages.count)  // 输出0

Swift快速入门五集合的更多相关文章

  1. html5使用canvas实现弹幕功能示例

    这篇文章主要介绍了html5使用canvas实现弹幕功能示例的相关资料,需要的朋友可以参考下

  2. HTML5 WebSocket实现点对点聊天的示例代码

    这篇文章主要介绍了HTML5 WebSocket实现点对点聊天的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. 前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)

    这篇文章主要介绍了前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. H5 canvas实现贪吃蛇小游戏

    本篇文章主要介绍了H5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

  6. ios – 声明NSDictionary并在Swift中添加键值对?

    我一直在尝试使用类类型键和值来声明一个NSDictionary,如下所示:这里,“Category”和“SubCategory”是全局类.我知道我不能将类类型用于关键字段.但是,无论如何,我应该做到这一点.有没有办法做到这一点?如何声明专门的NSDictionary或类似的东西来做到这一点?

  7. ios – parse.com用于键,预期字符串的无效类型,但是得到了数组

    我尝试将我的数据保存到parse.com.我已经预先在parse.com上创建了一个名为’SomeClass’的类.它有一个名为’mySpecialColumn’的列,其数据类型为String.这是我尝试使用以下代码保存数据的代码:如果我运行这个我得到:错误:密钥mySpecialColumn的无效类型,预期字符串,但得到数组这就是我在parse.com上的核心外观:有谁知道我为什么会收到这个错误?

  8. ios – 在Swift中将输入字段字符串转换为Int

    所以我非常擅长制作APP广告Swift,我试图在文本字段中做一些非常简单的输入,取值,然后将它们用作Int进行某些计算.但是’vardistance’有些东西不正确它是导致错误的最后一行代码.它说致命错误:无法解开Optional.None解决方法在你的例子中,距离是一个Int?否则称为可选的Int..toInt()返回Int?因为从String到Int的转换可能失败.请参阅以下示例:

  9. ios – Swift相当于`[NSDictionary initWithObjects:forKeys:]`

    Swift的原生字典是否与[NSDictionaryinitWithObjects:forKeys:]相当?假设我有两个带键和值的数组,并希望将它们放在字典中.在Objective-C中,我这样做:当然我可以通过两个数组迭代一个计数器,使用vardict:[String:Int]并逐步添加东西.但这似乎不是一个好的解决方案.使用zip和enumerate可能是同时迭代两者的更好方法.然而,这种方法

  10. 如何在iOS中检测文本(字符串)语言?

    例如,给定以下字符串:我想检测每个声明的字符串中使用的语言.让我们假设已实现函数的签名是:如果没有检测到语言,则返回可选字符串.因此,适当的结果将是:有一个简单的方法来实现它吗?

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部