1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~

2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。

二、集合类

1、数组Array

数组中的集合元素是有序的,可重复出现

1.1、初始化

var array1:Array<String> = ["Zhu","Hu","Huang"]      //<String>是泛型,表示此数组只能存放字符串类型的数据
var array2:[String] = ["Zhu"]           //[String]与Array<String>等价
let array3:[String] = ["Zhu"]           //let声明不可变数组,必须同时进行初始化,初始化后不能修改
var array4 = [String]()                 //初始化空数组,限定值类型为String
var array5 = ["Zhu","Huang"]       //不写类型系统自动推断
var array6 = array1 + array2            //两数组相加创建数组
print(array6)
var repeatArray = [Double](count: 3,repeatedValue: 2.18)
print(repeatArray)      //初始化一个长度为3,元素均为2.18
var repeatArray1 = Array(count: 3,repeatedValue: 21.8)
print(repeatArray1)

Output:

["Zhu","Huang","Zhu"]
[2.18,2.18,2.18]
[21.8,21.8,21.8]

注意点:
a、不可变数组在访问效率上比可变数组要高,可变数组通过牺牲效率换取可变。当可变数组内添加新元素的时候,数组要重新改变大小,然后重排其索引下标,影响性能。
b、var array2:[String][String]()的区别,前者语句声明没有初始化,未开辟内存空间。而后者进行初始化,只是没有任何元素
c、[String]Array<String>等价
d、let声明不可变数组,必须同时进行初始化,初始化后不能修改
e、不写类型系统自动推断

1.2、基本操作

var countList:[String] = ["One","Two","Three"]
print("初始数组:\(countList)")
增加操作
//增加元素append
countList.append("Four")
print("增加后:\(countList)")
//增加insert
countList.insert("Zero",atIndex: 0)
print("Insert后:\(countList)")
//+=操作符
countList += ["Five","Six"]
print("+=操作后:\(countList)")

Output:

初始数组:["One","Three"]
增加后:["One","Three","Four"]
Insert后:["Zero","One","Four"]
+=操作后:["Zero","Four","Five","Six"]
改操作
//替代(修改)
countList[0] = "数字0"
print("替代操作后:\(countList)")

Output:

替代操作后:["数字0","Six"]
改一系列操作
//countList[1...5] = ["数字1","数字2","数字3","数字4","数字5","数字6"]
//print("替代操作长度大于需要长度:\(countList)")
//替代操作长度大于需要长度:["数字0","数字1","数字6","Six"]

countList[1...5] = ["数字1","数字5"]
print("替代操作后长度等于需要长度:\(countList)")
//替代操作后长度等于需要长度:["数字0","Six"]

//countList[1...5] = ["数字1","数字4"]
//print("替代操作后长度小于需要长度:\(countList)")
//替代操作后长度小于需要长度:["数字0","Six"]

注意
把下标为1-5的元素改掉,后面修改的内容个数可以小于/等于/大于之前需要修改的个数,因此可能会改变数组的长度。但千万注意是不会影响其他下标位置的内容,只是在此range内长度变化

删操作
countList.removeLast()
print("remove最后一个元素后:\(countList)")

Output:

remove最后一个元素后:["数字0","数字5"]
判断数组是否为空
if countList.isEmpty {
    print("Array is Empty")
}else {
    print("Array is Not Empty")
}

Output:

Array is Not Empty
数组长度
//获取数组长度
print("数组长度为\(countList.count)")
//容量为能容纳当前内容的最小长度(值的规律有待考究)
print("数组容量为\(countList.capacity)")

Output:

数组长度为6
数组容量为12
数组遍历
//数组的遍历
for item in countList {
    print(item)
}
 //索引值和数值,enumerate()返回一个由每一个数据项索引值和数据值组成的元组
for (index,value) in countList.enumerate() {
    print("Item \(index+1) : \(value)")
}

Output:

数字0
数字1
数字2
数字3
数字4
数字5
Item 1 : 数字0
Item 2 : 数字1
Item 3 : 数字2
Item 4 : 数字3
Item 5 : 数字4
Item 6 : 数字5

2、集合Set

集合用来存储相同类型并且没有确定顺序的值。与数组不同,当集合元素顺序不重要或者确保每个元素值出现一次是使用集合

2.1、集合类型的哈希化

一个类型为了存储在集合中,该类型必须是可哈希化的-该类型必须提供一种方法计算它的哈希值,一个哈希值为Int类型,相等的对象哈希值必须相同。

a=b那么a.hashValue == b.hashValue

Swift的所有基本类型(形如String,Int,Double,Bool)默认是可哈希化的,可以作为集合的值的类型或者字典的键的类型。没有关联值的枚举成员值(在枚举有讲述)默认也是可哈希化的。

-

Swift可以自定义类型作为集合值或键的类型,但是要满足标准库中的Hashable协议,Hashable协议符合Equatable协议(自反性,对称性,传递性)

2.2、集合基本操作

集合的基本增删改查操作大致与数组相同

2.3、集合成员基本操作

let oddSets:Set = [1,3,5,7,9]
let evenSets:Set = [0,2,4,6,8]
let primeSets:Set = [2,7]

print(oddSets.union(evenSets).sort())           //组合
print(oddSets.intersect(evenSets).sort())       //交集
print(oddSets.subtract(primeSets).sort())       //不在该集合中的值
print(oddSets.exclusiveOr(primeSets).sort())    //该集合除去交集且除去另一集合值

Output:

[0,1,8,9]
[]
[1,9]
[1,9]

2.4、集合之间关系

let testSet1:Set = [1,2]
let testSet2:Set = [1,3]
let testSet3:Set = [4,5]
let testSet4:Set = [1,2]

print(testSet1 == testSet4)                 //判断1,4是否包含全部相同值
print(testSet1.isSubsetof(testSet2))        //判断1是否被包含在2中
print(testSet2.isSupersetof(testSet1))      //判断2是否包含1
print(testSet1.isstrictSubsetof(testSet2))  //多个个Strict时多了个两集合不相等的条件
print(testSet1.isstrictSupersetof(testSet4))
print(testSet2.isdisjointWith(testSet3))    //判断两集合是否无交集

Output:

true
true
true
true
false
true

3、字典Dictionary

3.1、初始化

let不可变-声明时必须同时初始化,不可修改;var可变

var Dic1 = [:]
var Dic2 = Dictionary<String,Int>()   //声明一个空的字典,key的集合为String类型,value的集合为Int类型
let Dic3 = ["name":"Zhu","age":21]
var InfoDic:Dictionary<String,String> = ["name":"Zhu","age":"21"]
print(InfoDic)

Output:

["age": "21","name": "Zhu"]

3.2、基本操作

添加/修改操作

会在字典中查找key对应的value,如果有key修改对应的value,如果没有该key就增加key-value

InfoDic["name"] = "Zane"
print(InfoDic)

InfoDic["sex"] = "Man"
print(InfoDic)

InfoDic.updateValue("NCZ",forKey: "name")
print(InfoDic)

Output:

["age": "21","name": "Zane"]
["age": "21","sex": "Man","name": "NCZ"]
删除操作
InfoDic["sex"] = nil
print(InfoDic) InfoDic.removeValueForKey("age") print(InfoDic)

Output:

["age": "21","name": "NCZ"]
["name": "NCZ"]
键值对个数
print("Dic count is " + String(InfoDic.count))

Output:

Dic count is 1
遍历
var dormDic:Dictionary<String,String> = ["dorm1":"Zhu","dorm2":"Zheng","dorm3":"Fu"]
//遍历
//键值遍历
for (dormNum,dormName) in dormDic {
    print("\(dormNum) : \(dormName)")
}

//值遍历/键遍历
for value in dormDic.values {
    print("寝室成员名字:\(value)")
}

for key in dormDic.keys {
    print("寝室成员编号:\(key)")
}

Output:

dorm1 : Zhu
dorm2 : Zheng
dorm3 : Fu
寝室成员名字:Zhu
寝室成员名字:Zheng
寝室成员名字:Fu
寝室成员编号:dorm1
寝室成员编号:dorm2
寝室成员编号:dorm3
提取所有values(keys相同)
let allValues = Array(dormDic.values)
print(allValues)

Output:

["Zhu","Zheng","Fu"]

Swift(二、集合)的更多相关文章

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

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

  2. three.js模拟实现太阳系行星体系功能

    这篇文章主要介绍了three.js模拟实现太阳系行星体系功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

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

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

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

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

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

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

  6. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

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

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

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

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

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

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

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

随机推荐

  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,所以编译器会报错,现在来一一解决。

返回
顶部