Swift 学习笔记

assert(条件,断言信息)

断言被触发时则应用终止

空合运算符(a??b)对可选变量a进行空判断,如果a包含一个值就进行解封,否则返回一个默认值b。

表达式a必须是一个可选变量

b的类型要和a存储值的类型保持一致

相当于a!=nil?a!:b

区间运算符

for index in 1...5{

print("\(index) * 5 = \(index * 5)")

}



字符串变量可通过isEmpty属性来判断该字符串是否为空

常量字符串不可以被修改

String类型是值类型,任何情况下,进行操作时都会对已有字符串值创建新副本

可遍历字符串中的charaters属性来获取每一个字符的值

let catCharacters:[Character] = ["C","a","t","!","?"]

let catString = String(catCharacters)

print(catString)

字符串插值即可以是一个整形的变量a作为\(a)被插入到一个字符串常量中。



Unicode是一个国际标准,用于文本的编码和表示。

字符串字面量的特殊字符: \"双引号

可若站的字符群集作为Character值来连接或者改变字符串是,并不一定会更改字符串的字符数量

可扩展的字符群集可以组成一个或者多个Unicode标量,这意味着不同的字符以及相同字符的不同表示方式可能学要不同数量的内存空间来存储,所以Swift中的字符在一个字符串中并不一定占用相同的内存空间数

每一个String的值都有一个关联的索引类型,String.index,它对应着字符串中的每一个Character的位置

endIndex对应的是获取String最后一个Character的后一个位置的索引

let greeting = "Guten Tag!"

greeting[greeting.startIndex]//G

greeting[greeting.index(before:greeting.endIndex)]  //!//index(before:)

greeting[greeting.index(after:greeting.startIndex)] //u//index(after)

let index = greeting.index(greeting.startIndex,offsetBy:7)//index(_:offsetBy)

greeting[index]   //a

使用characters属性的indices属性会创建一个包含全部索引的范围

for index in greeting.characters.indices{

print("\(greeting[index])",terminator:"")

}

插入和删除

insert(contentsOf:    ,at:       )

remove(at:    )

let range = welcome.index(welcome.endIndex,offsetBy:-6)..<weicome.endIndex

welcome.removeSubrange(range)

可用hasPrefix()来计算包含前缀的字符串数

可用hasSuffix()来计算包含后缀的字符串数



创建一个带默认值的数组:var threeDouble = Array(repeating:0.0,coutnt:3)

可通过加法运算符来组合两种已存在的相同类型数组

创建一个空数组:var a = [Int]()

用数组字面量构造数组

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

可用布尔属性isEmpty检查count属性是否为0

还可以利用下标一次改变一系列数据值:a[4...6] = [1,2]

可用insert(content, at: num)插在具体表项之前

remove(at:)移除数组中的某一项并返回这个被移除的数据项,移除最后一项用removeLast()


集合用来存储相同类型并且没有确定顺序的值,并且确保每个元素值出现一次

创建一个空集合:var letters = Set<Character>()

数组字面量创建集合

var favoriteGenres:Set<String> = ["Rock","Classical","Hip hop"]

Set类型不能从数组字面量中被单独推断出来,因此Set类型必须显式声明

可直接用insert和remove插入和删除元素

可用contains方法检查Set中是否包含一个特定的值

有多种创建不同集合的方法,可参看swift3.0第94页


字典简直类型一致时可以不必写出字典的类型

字典添加新值可以使用一个恰当类型的键作为下标索引,并且分配恰当类型的新值

也可以使用下标语法来改变特定键对应的值

可使用updateValue(_:forKey:)更新或者新添值,该函数还会返回一个可选值,用于检查更新是否成功

if let oldValue = airports.updateValue("Dublin Airport",forKey:"DUB"){

print("the old value for DuB was (oldValue)")

}

removeValue(forKey:)方法可用来在字典中移除键值对,并且返回被移除的值,在没有值的情况下返回nil

键值对对应着keys和values

为了以特定的顺序遍历字典的键或值,可以对字典的keys或values属性进行sorted()方法



swift中的switch与C之类的区别在于,当匹配的case分支中的代码执行完毕后,程序会终止switch语句,而不会继续执行下一个case分支,如果想继续执行的话可以在末尾添加一个fallthrough

不像C语言里的switch语句,swift里面为了让单个case同时匹配不同的元素时,需要将这两个值组合成一个复合匹配,并且用逗号分开

swift允许多个case匹配同一个值,如果存在多个匹配。那么只会执行第一个被匹配的case分支。

case 分支可以使用where语句来判断额外的条件

let a=(1,-1)

switch b{

case let (x,y) where x==y

print("(\(x),\(y)) is on the line x==y")

case let (x,y)where x==-y

print("(\(x),\(y)) is on the line x==-y")

}



要想改变参数的值,需要在函数参数的类型前面加上inout,即使用

输入输出参数,调用函数时需要传入的是变量而不能是常量,函数参数中写的参数前面应加上&


闭包是自包含的函数代码块,可以捕获的存储其所在上下文中任意常量和变量的引用

全局函数是一个有名字但不会捕获任何值的闭包

嵌套函数是一个有名字病可以捕获其封闭函数域内值的闭包

闭包表达式是可以捕获其上下文中变量或常量名的匿名闭包

闭包中可变参数应放在参数列表的最后一位

嵌套函数中捕获的外部参数并修改之后在调用完外围函数之后仍然会一直保留

swift3.0第136页如果你创建了另一个函数,则会有属于其自己的心得变量

当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回时才被执行

我们称该闭包从函数中逃逸


当使用字符串作为枚举类型的原始知识,每个枚举成员的隐式原始值为该枚举成员的名称


结构体和枚举是值类型,值类型被赋予一个变量,常量活着被传递给一个函数的时候,其值会被拷贝

当把一个结构体的实例赋给另一个时,只是单纯的值拷贝,改变另一个的结构体成员时不会对原实例的

成员产生影响。


类时引用类型,引用的是已存在的实例本身而不是其拷贝

判断两个常量或者变量是否引用同一个类实例 ===


存储属性:

如果创建了一个结构体的实例并将其复制给一个常量,则无法修改

当值类型的实例被声明为常量时,它的所有属性也是常量

而属于饮用类型的类则不一样,把一个引用类型的实例赋给一个常量后,

仍然可以修改该实例的变量属性

延迟存储属性必须声明为变量,因为属性的初始值可能在实例构造完成之后才会得到

而常量属性在构造完成之前必须要有初始值

计算属性不直接存储值,而是用getter和setter来间接获取和设置其他属性或变量的值

调用类型方法用类名加点

类型属性是通过类型本身来访问的,而不是用实例


如果你使用闭包来初始化属性,请记住在闭包执行时,实例的其它部分都还没有初始化。这意味着你不能在闭包里访问其它属性,即使这些属性有默认值。同样,你也不能使用隐式的self属性,或者调用任何实例方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容