![](https://img-blog.csdnimg.cn/db640aa6fa654c39bdcd1efc49892755.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
swift
文章平均质量分 50
swift相关知识总结
~废弃回忆 �༄
这个作者很懒,什么都没留下…
展开
-
扩展和协议混合使用
1.在扩展里添加协议遵循你可以扩展一个已经存在的类型来采纳和遵循一个新的协议,就算是你无法访问现有类型的源代码也行.扩展可以添加新的属性,方法和下标到已经存在的类型,并且因此允许你添加协议需要的任何需要.protocol TextRepresentable { var textualDescription: String {get} }extension Dice: TextRepresentable{ var textualDescription: Str原创 2023-03-21 17:46:40 · 92 阅读 · 0 评论 -
Swift中封装一个构建函数
封装构建函数原创 2022-08-17 17:33:55 · 615 阅读 · 0 评论 -
Swift中可选链
Swift中可选链原创 2022-08-17 10:54:44 · 201 阅读 · 0 评论 -
OC和Swift如何混合使用
OC和Swift如何混合使用原创 2022-08-14 10:39:51 · 515 阅读 · 0 评论 -
OC和Swift运行机制(派发机制)
Swift运行时(派发机制)原创 2022-07-26 21:21:10 · 952 阅读 · 0 评论 -
OC和Swift语言的区别
OC和Swift的区别原创 2022-07-23 16:07:48 · 1851 阅读 · 0 评论 -
亲身经历过的面试题
runtime消息机制 runtime对象发送消息流程 weak底层实现 关联对象底层实现 SSL/TLS消息发送过程 charles底层实现 如何防止抓包 工作遇到难点怎么处理 通知同步还是异步,如何实现异步 线程和队列之间的关系 atomic和nonatomic的区别?既然nonatomic是不安全的,为什么我们还要大量使用呢? 如何优化tableview? Category能不能添加成员变量?如果能的话,该如何进行添加? Category新增加的方法能不能和原类的方法一样?原创 2022-07-21 14:04:07 · 190 阅读 · 3 评论 -
Swift中的协议Protocol使用详情
1.协议的语法自定义类型声明时,将协议名放在类型名的冒号之后来表示该类型采纳一个特定的协议.多个协议可以用逗号分开列出.若一个类拥有父类,将这个父类名放在其采纳的协议名之前,并用逗号分隔.//定义一个协议protocol SomeProtocol{ }//SomeStructture遵守SomeProtocol协议struct SomeStructture: SomeProtocol { }// SomeClass继承于SomeSuperclass,并且原创 2022-05-11 10:50:14 · 571 阅读 · 0 评论 -
extension(扩展)使用详情
1.extension(扩展)扩展为现有的类,结构体,枚举类型,或协议添加了新功能.这也包括了为无访问权限的源代码扩展类型的能力(即所谓的逆向建模)扩展和OC的中category类似.(与OC的分类不同的是,Swift的扩展没有名字)2.extension的能力1.添加计算实例属性和计算类型属性2.定义实例方法和类型方法3.提供新初始化器4.定义下标5.定义和使用新内嵌类型6.使现有的类型遵循某协议7.扩展可以向一个类型添加新的方法,但是不能重写已有的方法原创 2022-05-10 20:47:06 · 1134 阅读 · 0 评论 -
Swift在is和as的使用详情
1.类型检查(is)使用类型检查操作符(is)来检查一个实例是否属于一个特定的子类.如果实例是该子类类型,类型检查操作符返回true,否则返回false.2.向下类型转换(as)每个类类型的常量或者变量可能实际上在后台引用自一个子类的实例.当你遇到这种情况时你可以尝试使用类型转换操作符(as?或as!)将它向下类型转换至其子类类型.由于向下类型转换可能失败,类型转换操作符就有两个不同形式.条件形式,as?,返回了一个你将要向下类型转换的值得可选项.强制形式,as!,则向下类型转换和强制展开原创 2022-05-10 19:49:27 · 445 阅读 · 0 评论 -
Swift中类的初始化和反初始化
1.初始化器在创建特定类型的实例时被调用var focus = Fahrenheit()struct Fahrenheit { var temperature: Double init() { temperature = 32.0 } }2.默认的属性值如上所述,你可以在初始化器里为存储属性设置初始值.另外,制定一个默认属性值作为属性声明的一部分.当属性被定义的时候你可以通过为这个属性分配一个初始值来指定默原创 2022-05-10 17:32:22 · 543 阅读 · 0 评论 -
如何为类,结构体,枚举添加方法
1. 实例方法实例方法是属于特定类实例,结构体实例或者枚举实例的函数.他们为这些实例提供功能性,要么通过提供访问和修改实例属性的方法,要么通过提供与实例目的相关的功能class Counter { var count = 0 func increment() { count += 1 } func increment(by amount: Int) { count += amoun原创 2022-05-07 20:08:07 · 155 阅读 · 0 评论 -
如何为类,结构体,枚举添加属性
1.存储属性在其最简单的形式下,存储属性是一个作为特定类和结构体实例一部分的常量或变量.,存储属性要么是变量存储属性(由var关键字引入)要么是常量存储属性(由let关键字引入).如果你创建一个结构体的实例并且把这个实例赋给常量,你不能修改这个实例的属性,即使是声明为变量的属性.2.延迟存储属性延迟存储属性的初始值在其第一次使用时才进行计算.你可以通过在其声明前标注lazy修饰语来表示一个延迟存储属性.如果被标记为lazy修饰符的属性同时被多个线程访问并且属性还没有被初始化,则无法保原创 2022-05-07 19:12:42 · 277 阅读 · 0 评论 -
Swift中enum(枚举)使用详情
1.枚举语法1.用enum关键字来定义一个枚举,然后将其所有的定义内容放在一个大括号({})中;2.多个成员值可以出现在同一行中,要用逗号隔开. enum CompassPoint { case north case south case east case west }2.使用Switch语句来匹配枚举值你可以使用Switch语句来匹配每一个单独的枚举值. let directionToH原创 2022-05-06 21:13:11 · 1131 阅读 · 0 评论 -
Swift中类和结构体的相似点与不同点
类和结构体相似点定义属性用来存储值;定义方法用于提供功能;定义下标脚本用来允许使用下标语法访问值;定义初始化用于初始化状态;可以被扩展来默认所没有的功能;遵循协议来针对特定类型提供标准功能.类和结构体不同点继承允许一个类继承另一个类的特征;类型转换允许你在运行检查和解释一个类实例的类型;反初始化器允许一个类实例释放任何其所被分配的资源;引用计数允许不止一个对类实例的引用....原创 2022-05-06 17:49:43 · 526 阅读 · 0 评论 -
Swift中高阶函数(三种)
1.map对于原始集合里的每一个元素,以一个变换后的元素替换之形成一个新的集合2.filter对于原始集合里的每一个元素,通过判断来将其丢弃或者放进新集合3.reduce对于原始集合里的每一个元素,作用于当前累积的结果上4.Map的变形flatMap对于元素是集合的集合,可以得到单级的集合 let results = [[1,2,3,],[4,5,6],[7,8,9]] let allResults = results.flatMap { $0.map{原创 2022-05-06 17:03:12 · 596 阅读 · 0 评论 -
逃逸闭包和自动闭包
1.逃逸闭包1.当闭包作为一个实际参数传递给一个函数的时候,并且它会在函数返回之后调用,我们就说这个闭包逃逸了.当你声明一个接受闭包作为形式参数的函数时,你可以在形式参数前写@escaping来明确闭包是允许逃逸的;2.闭包可以逃逸的一种方法是被存储在定义与函数外的变量里.比如说,很多函数接收闭包实际参数来作为启动异步任务的回调.函数在启动任务后返回,但是闭包要直到任务完成–闭包需要逃逸,以便于稍后调用. var completionHanglers: [() -> Void]原创 2022-05-06 16:41:48 · 447 阅读 · 0 评论 -
Swift中字典(Dictionaty)使用详情
1.创建空字典初始化方式var dic1 = Dictionary<String,Int>()简写方式var dic2 = [String:Int]()字面量方式var dic3 :Dictionary<String,Int>=[:]2.count和isEmpty1.可以使用count只读属性来找出Dictionary拥有多个元素2.使用布尔量isEmpty属性检查字典是否为空3.遍历字典For-In 循环可以通过访问字典的keys和原创 2022-05-06 14:56:28 · 978 阅读 · 0 评论 -
Set使用详情
1. Set的概念Set是指具有某种特定性质的具体的或抽象的对象汇总而成的集体.其中,构成Set的这些对象则称为该Set的元素.2.Set集合的三个特性2.1.确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一;2.2.互斥性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次;2.3.无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的.3.创建SetSwift的集合类型写做Set,这里的Element是Set要储存的类型.不同原创 2022-05-06 11:22:42 · 222 阅读 · 0 评论 -
switch使用详情
switch语句会将一个值与多个可能的模式匹配.然后基于第一个成功匹配的模式来执行合适的代码块;switch语句一定是全面的.就是说,给定类型里每一个值都得被考虑到并且匹配到一个switch的case.如果无法提供一个switch case所有可能的值,你可以定义一个默认匹配所有的case来匹配所有未明确出来的值.这个匹配所有的情况用关键字default标记,并且必须在所有case的最后出现.1.没有隐式贯穿1.相比C和OC里的switch语句来说,switch里的switch语句不会默认从匹配ca原创 2022-05-05 16:02:44 · 621 阅读 · 0 评论 -
合并空值运算符
1.合并空值运算符(a??b),如果可选项a有值则展开,如果没有值,是nil,则返回默认值b.2.表达式a必须是一个可选类型.表达式b必须与a的储存类型相同.3.实际上是三元运算符作用到Optional上的缩写(a!=nil?a!:b).4.如果a的值是非空的,b的值将不会被考虑,也就是合并空值运算符是短路的.实例1:let a: Int? = 3let b = 4print(a ?? b)//3实例2:let num = addTwoNum(num1: 3, num2: ni.原创 2022-05-04 17:02:09 · 284 阅读 · 0 评论 -
Swift中String使用详情
字符串常见操作1.字符串是值类型1.String值在传递给方法或者函数的时候会被复制过去;2.赋值给常量或者变量的时候也是一样的;3.Swift编译器优化了字符串使用的资源,实际上拷贝只会在确实需要的时候才进行 var str: String = "abc" var str1 = str print(str==str1) //true str += "def" print(str) //abcdef原创 2022-04-29 16:18:39 · 839 阅读 · 0 评论 -
Optional(可选项)使用详情
1.为什么需要Optional1.OC里的nil是无类型的指针;2.OC里面的数组,字典,集合等不允许放入nil;3.OC所有对象变量都可以为nil;4.OC只能用在对象上,而在其他地方又用其他特殊值(例如NSNotFound)表示值得缺失;5.在swift中通过在变量类型后面加?表示这里有一个值,他等于X或者这里根本就没有值;6.你可以通过给可选变量赋值一个nil来将之设置为没有值;7.在OC中nil是一个指向不存在对象的指针;8.在swift中,nil不是指针,他是值缺失的一种特殊类型原创 2022-04-27 15:16:56 · 1407 阅读 · 0 评论 -
Swift中元组(Tuple)使用详情
1.元组定义1.元组可以将多个值合并成单一的复合值得值2.元组内的值可以是任何类型,而且可以不必是同一类型let error = (1,"没有权限")2.可变与不可变元组1.用var定义的元组就是可变元组,let定义的就是不可变元组2.不管是可变还是不变变元组,元组在创建后就不能增加和删除元素3.可以对可变元组的元素进行修改,但是不能改变其类型4.any类型可以改为任何类型var error1 =(errorCode:1 , errorMessage:"没有权限")erro原创 2022-04-27 14:29:44 · 1272 阅读 · 0 评论 -
获取APP(ipa)包中的图片资源
在电脑上面连接数据线,使用<PP助手>软件中下载对应的应用程序; 在"下载管理"中找到对应下载的ipa包; 对ipa包使用右键,选择"归档实用工具"打开; 找到以.app结尾的包,单击右键,选择"显示包内容";获取Assets中的图片在git上面下载"cartool"工具并运行; 选择项目中的"Edit Scheme..."; 左侧选中Run栏位,上面选中"Argument"; 在第一个栏位上面增加需要解包的(Assets.car)路径和需要解压到的路径; 运行程序..原创 2022-04-26 19:13:51 · 825 阅读 · 0 评论 -
Swift中的模式定义
模式的定义模式代表单个值或者复合值得结构.例如:元祖(1,2)的结构是由逗号分割的,包含两个元素的列表.因为模式代表一种值的结构,而不是特定的某个值,你可以利用模式来匹配各种各样的值.比如,(x,y)可以匹配元组(1,2),以及任何含两个元素的元组.除了利用模式匹配一个值以外,你可以从复合值中提取部分或者全部值,然后分别把各个部分的值和一个常量或变量绑定起来.Swift中的模式分为两类:一种能成功匹配任何类型的值,另一种运行时匹配某个特定值时可能会失败.第一类模式用于解构简单变量,常量和可选绑定原创 2022-04-03 21:08:35 · 2452 阅读 · 0 评论 -
Swift中控制转移(continue,break,fallthrough)
continue告诉循环停止正在做的事情并且再次从头开始循环的下一次遍历.他是说"我不再继续当前的循环遍历了"而不是离开整个的循环.break会立即结束整个控制流语句.当你想要提前结束switch或者循环语句或者其他情况的可以在switch语句或者循环语句中使用break语句.当在循环语句中使用时,break会立即结束循环的执行,并且转移控制到循环结束花括号(})后的第一行代码上.当前遍历循环里的其他代码都不会执行,并且余下的遍历循环也不会开始了.当在switch语句里使用时,break原创 2022-04-03 17:32:11 · 2035 阅读 · 0 评论 -
Swift中的宏定义
第一种可以直接使用let TOOLBAR_HEIGTH:CGFloat = 44来替换就可以了第二种因为后面的值永远也不会变,也可以使用let来替换;可以用let SCREEN_WIDTH = UIScreen.main.bounds.size.width第三种也就是后面的值会发生变化,如状态栏的高度,就不能够使用let来替换了,因为let是定义的常量,如果使用let,将会导致不能够获取正确的值;这里可以使用函数来获取: func STATUSBAR_HEIGHT() -> CGF原创 2022-04-03 09:18:15 · 3206 阅读 · 0 评论 -
swift中数组使用详情
初始化一个数组//[类型]() var array1=[String]() //Array<类型>()var array2=Array<String>()//将"Z"重复创建5次var array3=Array(repeating: "z", count: 5)//使用区间初始化一个数组var aray4=[Int](0...7)数组的遍历/* forEach: 无法使用break或continue跳出或者跳过循环原创 2022-03-08 12:02:48 · 1316 阅读 · 0 评论 -
lldb常用指令
//读取寄存器的值pregister read/格式pregister read/x//修改寄存器的值pregister write 寄存器名称 数值pregister write rax 0//读取内存中的值px/数量-格式-字节大小 内存地址px/3xw 0x0000010//修改内存中的值pmemory write 内存地址 数值pmemory write 0x0000010 10//格式px是16进制,f是浮点,d是十进制//字节大小pb – byte 1字节原创 2022-01-15 11:51:17 · 488 阅读 · 0 评论 -
常见汇编指令
项目AT&T(苹果模拟器)intel说明寄存器命名%raxrax操作数顺序movq %rax, %rdxmov rdx, rax将rax 的值赋值给rdx常数\立即 数movq $3, %rax movq $0x10, %raxmov rax, 3mov rax, 0x10将3赋值给rax将0x10赋值给rax内存赋值movq $0xa, 0x1ff7(%rip)mov qword ptr [rip+0x1ff...原创 2022-01-15 11:46:12 · 521 阅读 · 0 评论 -
输入输出参数
可以用inout定义一个输入输出参数:可以在函数内部修改外部实参的值func swapValues(_ v1: inout Int, _ v2: inout Int){ let tmp = v1 v1 = v2 v2 = tmp} var num1 = 10 var num2 = 20 swapValues(&num1, &num2) /* 1.可变参数不能为inout(...) 2.inout参数不能有默认值 3.inout参数只能传入可原创 2022-01-12 17:58:18 · 181 阅读 · 0 评论 -
条件判断(whilec循环&for&switch循环&if-else判断)
if-elselet age = 4if age >= 22 { print("Get married") }else if age >= 18{ print("Being a adult") }else if age >= 7{ print("Go to school") } else{ print("Just a child")}/*1.if后面的条件可以省略小括号2.条件后面的大括号不可以省略*/if后面的条件只能是Bool原创 2022-01-11 20:45:09 · 162 阅读 · 0 评论 -
字面量汇整
1. 布尔 let bool =true //取反是false 2. 字符串 let string =@"我是谁" 3. 字符 //字符(可储存ASCII字符,Unicode字符) let character: Character ="小狗" 4. 整数 let intDecimal = 17 //十进制 let intBinary = 0b1001 //二进制 let intOctal = o021 //八进制 let intHex.原创 2022-01-11 18:12:17 · 87 阅读 · 0 评论