![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Swift
文章平均质量分 85
海森堡_lichangan
这个作者很懒,什么都没留下…
展开
-
RxCocoa学习笔记
RxCocoa学习笔记UILabel将数据绑定到 text 属性上(普通文本)将数据绑定到 attributedText 属性上(富文本)UITextField 与 UITextView监听单个 textField 内容的变化(textView 同理)方法一方法二将内容绑定到其他控件上同时监听多个 textField 内容的变化(textView 同理)事件监听UITextView 独有的方法UIButton 与 UIBarButtonItem按钮点击响应按钮标题(title)的绑定按钮富文本标题(attr原创 2021-11-18 16:37:53 · 2245 阅读 · 0 评论 -
RxSwift学习笔记
RxSwift专业术语从“以时间为索引的常量队列”开始 - Observable在RxSwift里,这种概念叫做Observable。其中,最上面的一排,就是一个Observable。从左到右,表示时间由远及近的流动过程。上面的每一个形状,就表示在“某个时间点发生的事件”,而最右边的竖线则表示事件成功结束。创建一个事件为了创建一个包含字符1-9的序列,我们可以在Sources/main.swift中添加下面的代码:import RxSwiftObservable.of("1", "2",原创 2021-11-16 13:17:31 · 2620 阅读 · 0 评论 -
15、OC与Swift的混编
在使用Swift进行iOS开发的过程中,经常涉及到Swift与OC混编的情况,有时主工程是OC的需要另外编入Swift代码,而有时主工程是Swift的需要另外编入OC代码。这其中涉及到修改一下XCode的工程配置。1、在同一个工程中的混编在Swift 5.1中,两种混编的实现步骤:Swift访问OC:只需要在桥接文件(ProductName-Bridging-Header.h)中导入需要暴露给Swift的OC类,即可在Swift中访问相应OC类及方法。OC访问Swift:在OC类中导入Pro原创 2021-10-24 10:43:04 · 3040 阅读 · 1 评论 -
14、Swift的自动引用计数
ARCSwift使用自动引用计数(ARC)来跟踪并管理应用使用的内容。当实例不被使用时,ARC会自动释放这些类的实例所占用的内存。引用计数只应用在类的实例。结构体和枚举类型都是值类型,并非引用类型,不是以引用类型的方式来存储和传递的。ARC是如何工作的每次创建一个类的实例,ARC都会分配一个内存块,用来存储这个实例的相关信息。这个内存块保存着实例的类型,以及这个实例相关的属性的值。当实例不在被使用时,ARC会释放这个实例使用的内存空间。但是如果ARC释放了仍在使用的实例,那么你就不能再访问原创 2021-10-24 01:21:06 · 2095 阅读 · 0 评论 -
13、Swift中的Codable
13、Swift中的JSON解析1.1 Codable简介1.2 Codable的痛点1.3 Codable的简单使用1.4 json中的key和模型中的Key不对应1.4.1、实现CodingKey协议进行枚举映射1.4.2 keyDecodingStrategy1.5 使用嵌套的JSON对象1.6 处理Sex1.7 处理数组1.1 Codable简介Codable 是 Swift 4.0 以后推出的一个编解码协议,可以配合 JSONDecoder 和 JSONEncoder 用来进行 JSON 解原创 2021-08-17 11:03:40 · 1357 阅读 · 0 评论 -
12、Swift中的异常处理
13、Swift中的异常处理1、Swift中的错误处理机制1.1 Optional1.2 通过enum和Error封装错误1.3 Swift中的throw和catch2、NSError是如何桥接到Swift原生错误处理的3、Swift中的错误时如何映射到NSError的LocalizedErrorCustomNSError4、如何处理closure发生的错误4.1 对于异步回调函数的错误处理方式5、使用defer以及串联either type5.1 通过defer来计数5.2 串联多个either type原创 2021-08-16 11:42:43 · 470 阅读 · 0 评论 -
11、Swift中的泛型
12、Swift中的泛型1、泛型函数1.1 泛型函数基础1.2 带有类型约束的泛型函数2、泛型类型3、泛型扩展1、泛型函数1.1 泛型函数基础func swapTwoValues<T>(a:inout T,b:inout T){ (b,a) = (a,b)}var a:Double = 10var b:Double = 11swapTwoValues(a: &a, b: &b)print(a)print(b)这个尖括号告诉Swift那个T是swap原创 2021-08-16 10:30:57 · 988 阅读 · 0 评论 -
10、理解Swift中方法的派发机制
10、理解Swift中方法的派发机制1、Swift中有哪些派发方法1.1 Direct Dispatch(直接派发)1.2 Table dispatch(函数表派发)2、Swift是如何使用Objective-C消息派发机制1.3 Message Dispatch(消息机制派发)3、Swift的方法派发规则3.1 值类型永远使用direct dispatch3.2 在protocol和class的定义中声明的方法使用table dispatch3.3 在protocol和class的extension中定原创 2021-08-12 13:14:41 · 1899 阅读 · 2 评论 -
09、Swift中的class
1、struct 和 class的差异作为Swift中的另外一种自定义类型,从语法上来说,class和struct有很多相似的地方,它们都可以用来自定义类型、都可以有properties,也都可以有methods。作为Swift中的引用类型,class表达的是一个具有明确生命周期的对象,我们需要关注这类内容的“生死存亡”,而值类型,我们更多关注的,就真的只是它的值而已。1.1 引用类型必须明确指定init方法首先,Swift并不会为class自动生成默认的init方法。如果我们不定义它,Swift编原创 2021-08-11 16:35:46 · 1636 阅读 · 1 评论 -
08、值类型的Copy-On-Write
Copy-On-Write的理解当我们这样定义一个Array的时候:var numbers1 = [1, 2, 3, 4, 5]虽然Swift中的Array是一个struct,但numbers1中的数字并不保存在numbers1对象里,它们会另外存储在系统堆内存中。numbers1对象里,只会保存指向堆内存的一个引用。我们可以用下面的代码确认这个事情:MemoryLayout.size(ofValue: numbers1) // 8可以看到,这段代码的返回的结果是8,也就是一个64位内存地址占原创 2021-08-09 13:11:18 · 75 阅读 · 0 评论 -
07、enum枚举
很多时候,我们需要用一组特定的值,来表达一个公共的含义。例如用1,2,3,4表示东、南、西、北,面对“把一组有相关意义的值定义成一个独立的类型”这样的任务,Swift为我们提供了一种类型安全的方式,叫做enum。1、定义enum1.1 不设置rawValueenum Week { case MON case TUE case WED case THU case FRI case SAT case SUN}简写:enum Week {原创 2021-08-09 11:22:16 · 332 阅读 · 0 评论 -
06、struct结构体
Swift提供了多种可以结构化存储数据的方式,分别是struct、enum和class。Swift标准库中绝大多数类型都是struct,甚至Foundation中的一些类都提供了它们在Swift中的struct版本,而enum和class只占据了其中份额很小的一部分。struct的定义和初始化定义struct结构体struct Human{ var name:String var sex:String var age:Int}name、sex、age所占用的内存空间决定了H原创 2021-08-06 11:31:26 · 116 阅读 · 0 评论 -
05、Optional相关
使用技巧if let如果我们要表达“当optional不等于nil时,则执行某些操作”这样的语义写法一:var number:Int? = 1if number != nil{ print(number!)}写法二:if let number = number { print(number)}guard letfunc test() { guard let number = number else { //如果为nil直接返回 retur原创 2021-08-06 10:23:48 · 106 阅读 · 0 评论 -
04、函数和闭包
函数基础定义一个最简单的函数func printHello(){ print("Hello")}其中:func是定义函数的关键字,后面是函数名;()中是可选的参数列表,现在是空参数()后面是函数的返回值,现在是没有返回值{}中是函数要封装的逻辑设置参数func pringHello(to somebody:String){ print("Hello\(somebody)")}printHello(to:"Lichangan")在Swift里,函数的参数实际上有原创 2021-08-05 11:40:39 · 223 阅读 · 0 评论 -
03、条件判断和循环以及样式匹配
1、条件分支判断语句1.1 if …else if …elsevar sex = "male"var tip = ""if sex == "male" { tip = "男性"}else if sex == "female" { tip = "女性"}1.2 switch … case …switch sex {case "male": tip = "男性"case "female": tip = "女性"default: tip = "未知"原创 2021-08-04 14:57:01 · 134 阅读 · 0 评论 -
02、Swift3.0中的集合类型
02、Swift3.0中的集合类型1、Array1.1 Array的定义1.1.1 创建一个Array1.1.2 创建一个Array同时初始化1.2 常用属性1.2.1 获取Array中元素的个数1.2.2 判断Array是否为空1.2.3 访问Array中的元素1.2.4 遍历数组1.2.5 添加元素1.2.6 删除元素1.2.7 查找数组中元素的位置1.2.8 filter1.2.9 reduce1.3 Array和NSArray的不同1.3.1 按照值语义实现的Array1.3.2 按引用语义实现的N原创 2021-08-03 16:30:09 · 151 阅读 · 0 评论 -
01、Swift基础运算
01、Swift基础运算变量和常量变量常量Type Inference / annotation数据类型整数整数类型整数的常用表达方式浮点数和数字有关的类型推断(Type Inference)字符串获取前缀获取后缀遍历字符串中的每一个字符插入内容基于Range的查找和替换截取子串分割字符串字符串数组转换为字符串元组 Tuple定义元组访问元组元素元素比较常用操作符赋值操作基本算术运算操作符复合运算操作符比较操作符逻辑运算符变量和常量变量在Swift里面,使用var来定义各种不同类型的变量:var n原创 2021-08-02 16:48:25 · 452 阅读 · 0 评论