Swift进阶
文章平均质量分 95
LinShunIos
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Swift —— Moya和高阶函数
我们日常都会和网络打交道不管是使用 AFN 还是 Alamofire ,虽然这两者都封装了 URLSession ,不用让我们使用官方繁琐的 API。久而久之我们会发现我们的APP中到处都散落着和 AFN 、 Alamofire 相关的代码,不便于统 一的管理,而且很多代码内容是重复的,于是我们就会新建一个中间层 Network layer 来统一 管理我们代码中 AFN 、 Alamofire 的使用。于此同时我们仅仅希望我们的App只和我们的 Network layer 打交道,不用关系底层使用的那个原创 2022-07-11 21:54:54 · 1635 阅读 · 2 评论 -
Swift ——String 与 Array
先创建一个空的字符串,运行后打印地址,看到只有一个有效消息0xe000000000000000。打开源码查看,看到在String.swift里面有一个初始化空字符串的方法。那么看到StringGuts.swift方法里面,看到初始化空字符串的方法。在看到StringObject.swift里面的empty方法。看到这里根据架构不同调用不同的初始化方法。这里看到arm的结构调用的方法,这里对属性进行赋值。StringObject是一个结构体,这些属性是StringObject的成员变量,那么当对原创 2022-07-10 23:27:00 · 1230 阅读 · 0 评论 -
Swift ——泛型与集合
下面的 multiNumInt 是个非泛型函数,主要用于计算两个数的乘积multiNum 函数很实用,但是它只能用于 Int 值。如果我们想计算两个 Double 或者 其他类型的乘积的值,我们需要在写一些函数,比如 multiNumDouble函数:但是我们发现, 函数体是一样的。唯一的区别是它 们接收值类型不同( Int和double)。这个时候我们想找到一个可以计算任意类型值的函数怎么办?泛型正是能让我们写出这样函数的语法。我们先来看一下泛型的基本写法 ,首先我我们要指定一个占位符 T ,紧挨着写原创 2022-07-08 17:07:48 · 881 阅读 · 0 评论 -
Swift ——协议
但是这个时候我们接到一个需求: 要为这两个类创建一个 debug 函数来打印当前类的基本信息。从继承的⻆度来说,我们可能会想到抽取一个公共的基类,当然大家都是动物,人也是动 物。从业务逻辑上来说,这么处理不太合理。可能最直观的办法是对于每一个类都写一个单独的 方法函数。如果我们对当前代码中的每个类都需要 debug ,那上面这种方法显然是行不通的,于是我们有 了下面的代码当然看到这里可能大家也会觉得没有问题,如果我们要具体的描述当前类的具体信息,这个时候 我们还需要引入一个公共的基类,同时我们还需要有原创 2022-07-05 22:52:43 · 1429 阅读 · 1 评论 -
Swift ——闭包
之前在代码的书写过程中,我们已经或多或少的接触过函数,函数本身也有自己的类型,它由形式参数类型,返回类型组成。如果将函数传递给a变量,那么就可以借助a来调用方法,这里addTwoInts代表函数类型。如果出现了同名函数,但是返回值或者参数不一样,那么就需要指明函数类型。否则就会报 ambiguous user of *** 错误,因为这个时候编译器不知道要给a赋值哪一个参数。把函数赋值给a,那么a里面储存的是什么呢?运行后打印a,这里看懂存储的是函数类型.这里函数类型也是引用类型,当把函数赋值给a的时候,原创 2022-07-03 21:46:23 · 1586 阅读 · 0 评论 -
Swift —— 指针
Swift —— 指针1.指针2. 指针类型3. 原始指针的使用4. 泛型指针的使用5. 指针读取macho中的属性名称6. 内存绑定7. 内存管理1.指针为什么说指针是不安全的呢?主要以下几点:比如我们在创建一个对象的时候,是需要在堆区分配内存空间的,但是这个内存空间的生命周期是有限的,也就意味着如果我们使用指针指向这块内存空间,如果当前内存空间的生命周期到了(也就是引用计数为0了),那么当前的指针就成了未定义的行为,也就是野指针。我们创建的内存空间是有边界的,比如创建一个大小为10的数组,这个原创 2022-06-26 21:13:28 · 1902 阅读 · 1 评论 -
Swift —— Enum & optional
Swift —— Enum & optional1. 枚举的基本用法2. 关联值3. 模式匹配3. 枚举的大小1. 枚举的基本用法swift 中通过 enum 关键字来声明一个枚举enum LGEnum{ case test_one case test_two case test_three}在 C 或者 OC中默认受整数支持,也就意味着下面的例子中: A, B, C分别默认代表 0, 1,2typedef NS_ENUM(NSUInteger, LGEnum)原创 2022-01-25 17:23:21 · 1952 阅读 · 0 评论 -
Swift —— 属性
Swift —— 属性1. 存储属性1.1 let 和 var 的区别代码角度汇编角度SIL角度2. 计算属性1. 存储属性存储属性是一个作为特定类和结构体实例一部分的常量或变量。存储属性要么是变量存储属性 (由 var 关键字引入)要么是常量存储属性(由 let 关键字引入)。存储属性这里没有什么特 别要强调的,因为随处可⻅。 比如这里的 age 和 name 就是我们所说的存储属性,这里我们需要加以区分的是 let 和 var 两者的区别:从定义上: let 用来声明常量,常量的值一旦设置好便不能原创 2022-01-05 16:06:43 · 2057 阅读 · 0 评论 -
Swift —— 类与结构体的方法
Swift —— 类与结构体的方法1. 异变方法1. 异变方法Swift 中 class 和 struct 都能定义方法。但是有一点区别的是默认情况 下,值类型属性不能被自身的实例方法修改。如果想要自身的实例方法可以修改struct的属性,那么就需要在方法前面加上mutating的关键字。那么mutating做了些什么呢?在结构体里添加一个没有mutating的方法和一个有mutating的方法,这样之后运行生成SIL文件方便进行观察。struct Point { var x = 0.原创 2021-12-30 17:50:06 · 2246 阅读 · 0 评论 -
Swift —— 类与结构体
Swift —— 类与结构体1. 初识类与结构体1.1 异同点1.2 类(引用类型)1.3 结构体 (值类型)1.4 类和结构体的内存位置1.4.1 结构体的内存位置1.4.2 类的内存位置2. 类的初始化器2.1 指定初始化器&便捷初始化器2.2 可失败初始化器2.3 必要初始化器3. 类的生命周期3.1 SIL文件分析3.2 类的初始化流程1. 初识类与结构体1.1 异同点结构体和类的主要相同点有:定义存储值的属性定义方法定义下标以使用下标语法提供对其值的访问定义初始化器使用原创 2021-12-28 15:02:36 · 2260 阅读 · 0 评论
分享