swift
sjl51060
这个作者很懒,什么都没留下…
展开
-
Swift 设计模式
设计模式可以归为一下3类:创建型(Creational):单例模式(Singeton)结构型(Structural):MVC、装饰器模式(Decorator)、适配器模式(Adapter)和外观模式(Facade)。行为型(Behavioral):观察者模式(Observer)、备忘录模式(Memento)...原创 2020-03-26 23:34:50 · 306 阅读 · 0 评论 -
数据结构:类、结构体、枚举
引用类型传递的是对象的指针,这些指针保存在栈(Stack)上,栈中的对象系统会自动为我们管理(ARC),这样我们就不用自己去开辟和释放内存空间了,一旦没有指针指向对象,那么对象就会马上被清理掉,这种机制叫做自动引用计数(ARC)。这些对象存储在(Heap)堆中类(Class)是引用类型定义类使用class 关键字class newClass {// 创建了一个新类...原创 2020-01-17 15:52:09 · 442 阅读 · 0 评论 -
属性
属性将值跟特定的类,结构体或枚举关联。实例属性1.1 存储属性struct SomeStruct { let name = "小宝" //常量存储属性 var age = 6 //变量存储属性 var briday: String? //可选属性 lazy var add =...原创 2020-01-17 15:29:07 · 506 阅读 · 0 评论 -
Swift 面向协议编程
这些天看了陈刚的《Swift面向协议编程》一书,感觉作为一个Swift新人很值得一看,他里面应该讲了些WWDC2015和WWDC2016的东西,我把重点做了下笔记。数据结构:类、结构体、枚举属性运算符...原创 2020-01-17 15:53:46 · 207 阅读 · 0 评论 -
Swift学习笔记 (三十六) 自动引用计数(上)
Java的垃圾回收:https://mp.weixin.qq.com/s/feJKRqYJTVEIxl6jvjevAg墙裂推荐阿里出品Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存。通常情况下,Swift 内存管理机制会一直起作用,你无须⾃己来考虑内存的管理。ARC 会在类的实例不再被使用时,自动释放其占用的内存。然⽽在少数情况下,为了能帮助你管理内存,AR...原创 2019-08-26 11:17:43 · 140 阅读 · 0 评论 -
Swift学习笔记 (三十五) 泛型(下)
关联类型定义一个协议时,声明一个或多个关联类型作为协议定义的一部分将会非常有用。关联类型为协议中的某个类型提供了一个占位符名称,其代表的实际类型在协议被遵循时才会被指定。关联类型通过associatedtype关键字来指定。关联类型实践下⾯例子定义了一个Container协议,该协议定义了一个关联类型Item:protocol Container { ...原创 2019-08-23 15:43:08 · 179 阅读 · 0 评论 -
Swift学习笔记 (三十四) 泛型(上)
泛型代码让你能根据自定义的需求,编写出适用于任意类型的、灵活可复用的函数及类型。你可避免编写重复的代码,⽽是用一种清晰抽象的方式来表达代码的意图。泛型是 Swift 最强大的特性之一,很多 Swift 标准库是基于泛型代码构建的。实际上,即使你没有意识到,你也一直在语言指南中使用泛型。例如,Swift 的Array和Dictionary都是泛型集合。你可以创建一个Int类型...原创 2019-08-22 16:36:42 · 177 阅读 · 0 评论 -
Swift学习笔记 (二十七) 错误处理
错误处理(Error handling) 是响应错误以及从错误中恢复的过程。Swift 在运⾏时提供了抛出、捕获、传递和操作可恢复错误(recoverable errors)的一等支持(first-class support)。某些操作无法保证总是执行完所有代码或生成有用的结果。可选类型用来表示值缺失,但是当某个操作失败时,理解造成失败的原因有助于你的代码作出相应的应对。举个例子,...原创 2019-08-19 13:20:03 · 233 阅读 · 0 评论 -
Swift学习笔记 (二十三) 构造过程(上)
构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例使用前有个过程是必须的,它包括设置实例中每个存储属性的初始值和执⾏其他必须的设置或构造过程。你要通过定义构造器来实现构造过程,它就像用来创建特定类型新实例的特殊方法。与 Objective-C 中的构造器不同, Swift 的构造器没有返回值。它们的主要任务是保证某种类型的新实例在第一次使用前完成正确的初始化。类的实例...原创 2019-08-14 11:31:50 · 160 阅读 · 0 评论 -
Swift学习笔记 (四十二) 不透明类型
具有不透明返回类型的函数或方法会隐藏返回值的类型信息。函数不再提供具体的类型作为返回类型,⽽是根据它支持的协议来描述返回值。在处理模块和调用代码之间的关系时,隐藏类型信息⾮常有用,因为返回的底层数据类型仍然可以保持私有。而且不同于返回协议类型,不透明类型能保证类型一致性 —— 编译器能获取到类型信息,同时模块使用者却不能获取到。不透明类型解决的问题举个例子,假设你正在写一个模...原创 2019-08-29 17:39:02 · 257 阅读 · 0 评论 -
Swift学习笔记 (二十二) 继承
一个类可以继承另一个类的⽅法,属性和其它特性。当一个类继承其它类时,继承类叫子类,被继承类叫超类(或父类)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。在 Swift 中,子类可以调用和访问超类的方法、属性和下标,并且可以重写这些方法,属性和下标来优化或修改它们的⾏为。Swift 会检查你的重写定义在超类中是否有匹配的定义,以此确保你的重写⾏为是正确的。可以为类中...原创 2019-08-12 17:58:54 · 258 阅读 · 0 评论 -
Swift学习笔记 (三十七) 自动引用计数(下)
⽆主引⽤和弱引用类似,无主引用不会牢牢保持住引用的实例。和弱引用不同的是,⽆主引用在其他实例有相同或者更长的⽣命周期时使⽤。你可以在声明属性或者变量时,在前面加上关键字unowned表示这是一个⽆主引用。⽆主引用通常都被期望拥有值。不过 ARC 无法在实例被销毁后将⽆主引用设为 nil,因为非可选类型的变量不允许被赋值为nil。重点使用无主引用,你必须确保引用始终指向...原创 2019-08-27 09:33:34 · 183 阅读 · 0 评论 -
Swift学习笔记 (三十八) 内存安全
默认情况下,Swift 会阻止你代码里不安全的行为。例如,Swift 会保证变量在使⽤之前就完成初始化,在内存被回收之后就无法被访问,并且数组的索引会做越界检查。Swift 也保证同时访问同一块内存时不会冲突,通过约束代码里对于存储地址的写操作,去获取那一块内存的访问独占权。因为Swift 自动管理内存,所以⼤部分时候你完全不需要考虑内存访问的事情。然而,理解潜在的冲突也是很重要的,可...原创 2019-08-27 15:17:25 · 152 阅读 · 0 评论 -
Swift学习笔记 (三十九) 访问控制
访问控制可以限定其它源文件或模块中的代码对你的代码的访问级别。这个特性可以让我们隐藏代码的一些实现细节,并且可以为其他人可以访问和使用的代码提供接口。你可以明确地给单个类型(类、结构体、枚举)设置访问级别,也可以给这些类型的属性、方法、构造器、下标等设置访问级别。协议也可以被限定在一定的范围内使用,包括协议⾥的全局常量、变量和函数。Swift 不仅提供了多种不同的访问级别,还为某些...原创 2019-08-28 14:49:42 · 210 阅读 · 0 评论 -
Swift学习笔记 (四十) 高级运算符(上)
除了之前介绍过的《基本运算符》,Swift 还提供了数种可以对数值进⾏复杂运算的高级运算符。它们包含了在 C 和 Objective-C中已经被大家所熟知的位运算符和移位运算符。与 C 语言中的算术运算符不同,Swift 中的算术运算符默认是不会溢出的。所有溢出行为都会被捕获并报告为错误。如果想让系统允许溢出⾏为,可以选择使用 Swift 中另一套默认支持溢出的运算符,比如溢出加法运算...原创 2019-08-28 18:17:27 · 376 阅读 · 0 评论 -
Swift学习笔记 (四十一) 高级运算符(下)
优先级和结合性运算符的优先级使得一些运算符优先于其他运算符;它们会先被执行。结合性定义了相同优先级的运算符是如何结合的,也就是说,是与左边结合为一组,还是与右边结合为一组。可以将其理解为“它们是与左边的表达式结合的”,或者“它们是与右边的表达式结合的”。当考虑一个复合表达式的计算顺序时,运算符的优先级和结合性是非常重要的。举例来说,运算符优先级解释了为什么下面这个表达式的运算结...原创 2019-08-29 14:29:03 · 172 阅读 · 0 评论 -
Swift学习笔记 (四十三) 词法结构
关键字和标点符号下⾯这些被保留的关键字不允许用作标识符,除非使用反引号转义,具体描述请参考《标识符》。除了inout、var以及 let之外的关键字可以用作某个函数声明或者函数调用当中的外部参数名,无需添加反引号转义。当一个成员与一个关键字具有相同的名称时,不需要使用反引号来转义对该成员的引用,除非在引用该成员和使用该关键字之间存在歧义 - 例如,self,Type和...原创 2019-09-02 13:54:43 · 275 阅读 · 0 评论 -
Swift学习笔记 (四十四) 类型
Swift 语⾔存在两种类型:命名型类型和复合型类型。命名型类型是指定义时可以给定名字的类型。命名型类型包括类、 结构体、枚举和协议。比如,一个用户定义类MyClass的实例拥有类型MyClass。除了用户定义的命名型类型, Swift 标准库也定义了很多常用的命名型类型,包括那些表示数组、字典和可选值的类型。那些通常被其它语言认为是基本或原始的数据型类型,比如表示数字、字符和...原创 2019-09-03 11:57:36 · 194 阅读 · 0 评论 -
Swift学习笔记 (二) 基础部分(中)
类型安全和类型推断Swift 是一个类型安全(type safe)的语言,它会在编译你的代码时进⾏类型检查(type checks),并把不匹配的类型标记为错误。如果你没有显式指定类型,Swift 会使用类型推断(type inference)来选择合适的类型。当你在声明常量或者变量的时候赋给它们一个字面量(literal value 或 literal)即可触发类型推断。(字⾯量就...原创 2019-07-22 11:37:46 · 142 阅读 · 0 评论 -
Swift学习笔记 (二十六) 可选链式调用
可选链式调用是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会成功;如果可选值是nil,那么调用将返回nil。多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为nil,整个调用链都会失败,即返回nil。注意Swift 的可选链式调用和 Objective-C 中向nil发送消息有些相像,但是...原创 2019-08-16 16:19:52 · 170 阅读 · 0 评论 -
Swift学习笔记 (三十三) 协议(下)
检查协议一致性你可以使⽤《类型转换》中描述的is和as操作符来检查协议一致性,即是否符合某协议,并且可以转换到指定的协议类型。检查和转换协议的语法与检查和转换类型是完全一样的: 1. is用来检查实例是否符合某个协议,若符合则返回true,否则返回false; 2. as?返回一个可选值,当实例符合某个协议时,返回类型为协议类型的可选值,否则返回n...原创 2019-08-22 11:11:46 · 391 阅读 · 0 评论 -
Swift学习笔记 (二十五) 析构过程
析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器⽤关键字deinit来标示,类似于构造器要用init来标示。析构过程原理Swift 会自动释放不再需要的实例以释放资源。如《自动引用计数》章节中所讲述,Swift 通过自动引用计数(ARC) 处理理实例的内存管理。通常当你的实例被释放时不需要手动地去清理。但是,当使用自己的资源时,你可能需要进⾏...原创 2019-08-15 16:11:45 · 148 阅读 · 0 评论 -
Swift学习笔记 (五) 基本运算符(下)
空合运算符空合运算符(a ?? b)将对可选类型a进⾏空判断,如果a包含一个值就进⾏解包,否则就返回一个默认值b。表达式a必须是 Optional 类型。默认值b的类型必须要和a存储值的类型保持一致。空合运算符是对以下代码的简短表达方法:a!=nil?a!:b上述代码使用了三元运算符。当可选类型a的值不为空时,进⾏强制解封(a!),...原创 2019-07-24 10:15:41 · 173 阅读 · 0 评论 -
Swift学习笔记 (十五) 函数(下)
忽略参数标签如果你不希望为某个参数添加一个标签,可以使⽤一个下划线(_)来代替⼀个明确的参数标签。funcsomeFunction(_firstParameterName:Int,secondParameterName:Int) {//在函数体内,firstParameterName和secondParameterName代表参数中的第一个和第二个参数值}...原创 2019-08-05 14:38:30 · 124 阅读 · 0 评论 -
Swift学习笔记 (十一) 控制流(循环)
Swift 提供了多种流程控制结构,包括可以多次执行任务的while循环,基于特定条件选择执行不同代码分支的if、guard和switch语句,还有控制流程跳转到其他代码位置的break和continue语句。Swift 还提供了for-in循环,⽤来更简单地遍历数组(Array),字典(Dictionary),区间(Range),字符串 (String)和其他序...原创 2019-07-31 17:58:41 · 249 阅读 · 0 评论 -
Swift学习笔记 (四) 基本运算符(上)
运算符是检查、改变、合并值的特殊符号或短语。例如,加号(+)将两个数相加(如let i = 1 + 2)。更复杂的运算例⼦包括逻辑与运算符&&(如if enteredDoorCode && passedRetinaScan)。Swift 支持大部分标准 C 语言的运算符,且为了减少常见编码错误做了部分改进。如:赋值符(=)不再有返回值,这...原创 2019-07-23 15:18:32 · 165 阅读 · 0 评论 -
Swift学习笔记 (三) 基础部分(下)
可选类型使⽤可选类型(optionals)来处理值可能缺失的情况。可选类型表示两种可能: 或者有值, 你可以解析可选类型访问这个值, 或者根本没有值。注意C 和 Objective-C 中并没有可选类型这个概念。最接近的是 Objective-C 中的一个特性,一个⽅法要不返回一个对象要不返回nil,nil表示“缺少一个合法的对象”。然而,这只对对象起作⽤——对于结构体,...原创 2019-07-22 17:45:31 · 172 阅读 · 0 评论 -
Swift学习笔记 (十) 集合类型-Dictionary
字典是⼀种⽆序的集合,它存储的是键值对之间的关系,其所有键的值需要是相同的类型,所有值的类型也需要相同。每个值(value)都关联唯一的键(key),键作为字典中这个值数据的标识符。和数组中的数据项不同,字典中的数据项并没有具体顺序。你在使用字典的时候需要通过标识符(键)访问数据,这种方法很大程度上和在现实世界中使用字典查字义的方法一样。注意Swift 的Dictionary类...原创 2019-07-30 19:25:00 · 288 阅读 · 0 评论 -
Swift学习笔记 (七) 字符串和字符(下)
访问和修改字符串你可以通过字符串的属性和方法来访问和修改它,当然也可以用下标语法完成。字符串索引每一个String值都有一个关联的索引(index)类型,String.Index,它对应着字符串中的每一个Character的位置。前⾯提到,不同的字符可能会占用不同数量的内存空间,所以要知道Character的确定位置,就必须从String开头遍历每一个 ...原创 2019-07-29 11:35:09 · 265 阅读 · 0 评论 -
Swift学习笔记 (六) 字符串和字符(上)
字符串是一系列字符的集合,例如"hello, world","albatross"。Swift 的字符串通过String类型来表示。⽽String内容的访问方式有多种,例如以Character值的集合。Swift 的String和Character类型提供了一种快速且兼容 Unicode 的方式来处理代码中的文本内容。创建和操作字符串的语法与 C 语⾔中字符...原创 2019-07-25 14:44:25 · 264 阅读 · 0 评论 -
Swift学习笔记 (十四) 函数(上)
函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的候“调用”这个函数来完成它的任务。Swift 统一的函数语法非常的灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂的带局部和外部参数名的 Objective-C 风格函数。参数可以提供默认值,以简化函数调用。参数也可以既当做传入参数,也当做传出参数,也...原创 2019-08-05 11:16:26 · 138 阅读 · 0 评论 -
Swift学习笔记 (九) 集合类型-Set
集合⽤来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合⽽不是数组。注意 Swift 的Set类型被桥接到 Foundation 中的NSSet类。集合类型的哈希值一个类型为了存储在集合中,该类型必须是可哈希化的——也就是说,该类型必须提供一个方法来计算它的哈希值。一个哈希值是Int类型的,相等的对象哈希值必须相同...原创 2019-07-30 16:33:44 · 297 阅读 · 0 评论 -
Swift学习笔记 (八) 集合类型-Array
Swift 语言提供数组(Array)、集合(Set)和字典(Dictionary)三种基本的集合类型用来存储集合数据。数组是有序数据的集。集合是无序无重复数据的集。字典是无序的键值对的集。Swift 中的数组、集合和字典必须明确其中保存的键和值类型,这样就可以避免插⼊一个错误数据类型的值。同理,对于获取到的值你也可以放心,其数据类型是确定的。注意Swift 的数组、集合和字典...原创 2019-07-29 16:34:58 · 258 阅读 · 0 评论 -
Swift学习笔记 (十六) 闭包
闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数(Lambdas)⽐较相似。闭包可以捕获和存储其所在上下文中任意常量和变量的引用。被称为包裹常量和变量。 Swift 会为你管理在捕获过程中涉及到的所有内存操作。注意如果你不熟悉捕获(capturing)这个概念也...原创 2019-08-06 18:16:35 · 364 阅读 · 0 评论 -
Swift学习笔记 (十二) 控制流(分支)
条件语句根据特定的条件执行特定的代码通常是十分有用的。当错误发生时,你可能想运行额外的代码;或者,当值太大或太小时,向用户显示一条消息。要实现这些功能,你就需要使用条件语句。Swift 提供两种类型的条件语句:if语句和switch语句。通常,当条件较为简单且可能的情况很少时,使用if 语句。⽽switch语句更适用于条件较复杂、有更多排列组合的时候。并且switc...原创 2019-08-01 18:50:33 · 167 阅读 · 0 评论 -
Swift学习笔记 (十三) 控制流(流程控制)
控制转移语句控制转移语句改变你代码的执⾏顺序,通过它可以实现代码的跳转。Swift 有五种控制转移语句:continue break fallthrough return throw我们将会在下面讨论continue、break和fallthrough语句。return语句将会在《函数》章节讨论,throw语句会在《错误抛出》章节讨论。Contin...原创 2019-08-02 16:04:24 · 155 阅读 · 0 评论 -
Swift学习笔记 (三十二) 协议(中)
委托委托是一种设计模式,它允许类或结构体将一些需要它们负责的功能委托给其他类型的实例。委托模式的实现很简单:定义协议来封装那些需要被委托的功能,这样就能确保遵循协议的类型能提供这些功能。委托模式可以用来响应特定的动作,或者接收外部数据源提供的数据,⽽无需关心外部数据源的类型。下⾯的例子定义了两个基于骰子游戏的协议:protocol DiceGame { var dic...原创 2019-08-21 15:22:39 · 160 阅读 · 0 评论 -
Swift学习笔记 (三十一) 协议(上)
协议定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、结构体或枚举都可以遵循协议,并为协议定义的这些要求提供具体实现。某个类型能够满足某个协议的要求,就可以说该类型遵循这个协议。除了遵循协议的类型必须实现的要求外,还可以对协议进⾏扩展,通过扩展来实现一部分要求或者实现一些附加功能,这样遵循协议的类型就能够使用这些功能。协议语法协议的定...原创 2019-08-20 17:35:56 · 222 阅读 · 0 评论 -
Swift学习笔记 (三十) 扩展
扩展可以给一个现有的类,结构体,枚举,还有协议添加新的功能。它还拥有不需要访问被扩展类型源代码就能完成扩展的能⼒(即逆向建模)。扩展和 Objective-C 的分类很相似。(与 Objective-C 分类不同的是,Swift 扩展是没有名字的。)Swift 中的扩展可以: 1.添加计算型实例属性和计算型类属性 2.定义实例方法和类方法 3.提供新的构造...原创 2019-08-20 13:59:54 · 209 阅读 · 0 评论 -
Swift学习笔记 (二十九) 嵌套类型
枚举常被用于为特定类或结构体实现某些功能。类似地,枚举可以方便的定义工具类或结构体,从而为某个复杂的类型所使用。为了实现这种功能,Swift 允许你定义嵌套类型,可以在支持的类型中定义嵌套的枚举、类和结构体。要在一个类型中嵌套另一个类型,将嵌套类型的定义写在其外部类型的{}内,而且可以根据需要定义多级嵌套。嵌套类型实践下⾯这个例子定义了一个结构体BlackjackCar...原创 2019-08-19 17:27:50 · 191 阅读 · 0 评论