
从入门到精通Swift
文章平均质量分 63
Win_77
iOS开发工程师,坐标北京,学习分享计算机开发知识。
展开
-
Swift中的内存访问冲突、指针、局部作用域
Swift中也有专门的指针类型,这些都被定性为“Unsafe”(不安全的),常见的有以下4中类型。原创 2022-09-30 12:25:57 · 854 阅读 · 0 评论 -
Swift中的协议
协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守。原创 2022-07-27 18:51:00 · 1962 阅读 · 0 评论 -
Swift中的Error处理
Swift中可以通过Error协议自定义运行时的错误信息。函数内部通过throw抛出自定义Error,可能会抛出Error的函数必须加上throws声明。需要使用try调用可能会抛出Error的函数。可以使用do-catch捕捉Error。原创 2022-08-07 11:48:52 · 1332 阅读 · 0 评论 -
汇编分析Swift中的String
字符串初始化时长度小于等于15的,字符串内容直接存放在str变量的内存中;字符串初始化时长度大于15的,字符串内容存放在__TEXT, __cstring中(常量区),字符串的地址值信息存放在str变量的后8个字节中,但是需要通过计算才能得出真实的地址值;append后如果字符串长度小于等于15,字符串内容依然存放在str变量内存中;append后如果字符串长度大于15,会开辟堆空间,因为常量区是不可以进行更改的。...原创 2022-08-25 23:03:17 · 986 阅读 · 2 评论 -
Swift中的扩展(Extension)
给协议进行扩展后,凡是遵守了这个协议的都会有对应的扩展方法,以下面为例,编写一个函数,判断一个证书是否为奇数。如果希望自定义初始化器的同时,编译器也能够生成默认初始化器,那么可以在扩展中编写自定义初始化器。可以添加方法、计算属性、下标、(便捷)初始化器、嵌套类型、协议等等。Swift中的扩展,有点类似于OC中的分类(Category)。扩展可以给协议提供默认实现,也间接实现 可选协议 的效果。不能添加指定初始化器,不能添加反初始化器。原创 2022-09-04 16:50:36 · 2781 阅读 · 0 评论 -
Swift中的下标(subscript)
下标(subscript),使用subscript可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻译为:小标脚本。subscript的语法类似于实例方法、计算属性,本质就是方法(函数)。原创 2022-07-03 20:36:53 · 1457 阅读 · 0 评论 -
Swift初始化器及可选链
如果链中任何一个节点是nil,那么整个链就会调用失败,可选链应用的地方还是很多的,在OC里面我们通常会加很多判断以避免崩溃,在Swift里面,因为有了可选链会减少很多我们自己的判断,提高了安全性。如果初始化器调用一个可失败初始化器导致初始化失败,那么整个初始化过程都失败,并且之后的代码都停止执行。可失败初始化器可以调用非可失败初始化器,非可失败初始化器调用可失败初始化器需要进行解包。可以用一个非可失败初始化器重写一个可失败初始化器,但反过来是不行的。deinit不接受任何参数,不能写小括号,不能自行调用。.原创 2022-07-24 16:37:28 · 157 阅读 · 0 评论 -
Swift中的访问控制(Access Control)及断言等知识补充
1、在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排序,实体指被访问级别修饰的内容)2、如果没有显式设置扩展的访问级别,扩展添加的成员的默认访问级别,跟直接在类型中定义的成员一样。1、类型的访问级别会影响成员(属性、方法、初始化器、下标)嵌套类型的默认访问级别。2、协议实现的访问级别必须 >= 类型的访问级别,或者 >= 协议的访问级别。1、协议中定义的要求(方法)自动接收协议的访问级别,不能单独设置访问级别。1、如果有显式设置扩展的访问级别,扩展添加的成员自动接收扩展的访问级别。原创 2022-09-12 22:04:38 · 1073 阅读 · 0 评论 -
汇编分析Swift多态原理
Swift中多态的实现原理,是类似于C++的虚表,直接将对象将来要调用的方法地址放到了类型信息里,而且是编译完就可以确定的。原创 2022-07-06 14:37:38 · 360 阅读 · 0 评论 -
Swift中的泛型(Generics)
Swift中的泛型是通过对元数据的处理实现的。如果协议中有associatedtype,那么会有类型识别不了的问题。原创 2022-08-19 00:04:45 · 895 阅读 · 0 评论 -
Swift中的继承(Inheritance)
继承(Inheritance),值类型(枚举、结构体)不支持继承,只有类支持继承。没有父类的类,称为:基类,Swift并没有像OC、Java那样的规定:任何类最终都要继承自某个基类。子类可以重写父类的下标、方法、属性,重写必须加上override关键字。......原创 2022-07-04 16:39:30 · 1555 阅读 · 0 评论 -
Swift中运算符相关内容
自定义运算符 (Custom Operator) 可以自定义新的运算符:在全局作用域使用operator进行声明原创 2022-09-01 23:25:37 · 737 阅读 · 0 评论 -
swift类型属性及其注意点
一、类型属性细节不同于存储实例属性,你必须给存储类型属性设定初始值 因为类型没有像实例那样的init初始化器来初始化存储属性原创 2022-07-01 14:56:39 · 496 阅读 · 0 评论 -
Swift初始化相关内容
Swift在编码安全方面是煞费苦心,为了保证初始化过程的安全,设定了两段式初始化、安全检查。原创 2022-07-18 12:12:36 · 509 阅读 · 0 评论 -
Swift中的类型相关内容
X.self是一个元类型(metadata)的指针,metadata存放着类型相关信息原创 2022-08-02 00:05:33 · 580 阅读 · 0 评论 -
Swift中的内存管理
4、如果想在定义闭包属性的同时引用self,这个闭包必须是lazy的(因为在实例初始化完毕之后才能引用self)6、如果lazy属性是闭包调用的结果,那么不用考虑循环引用的问题(因为闭包调用后,闭包的生命周期就结束了)3、逃逸闭包:闭包有可能在函数结束后调用,闭包调用逃离了函数的作用域,需要通过@escaping声明。3、在闭包表达式的捕获列表声明weak或unowned引用,解决循环引用问题。2、非逃逸闭包:闭包调用发生在函数结束前,闭包调用在函数作用域内。2、Swift的ARC中有3种引用。原创 2022-09-22 23:25:21 · 1100 阅读 · 0 评论