-
12_02、泛型
目录 泛型使用 泛型使用2 关联类型使用 some的使用泛型使用/// 一、泛型使用func genericsUse() -> Void { //1、 相同逻辑不同类型 需要写两个方法 do{ print("--------1---------") var num1 = 10 var num2 = 20 func swapInt(_ num1:inout Int, _ num2:inout Int){...…
-
12_01、error处理
目录 错误分析 rethrows defer的用法 assert的使用 fatalErro的使用错误分析一、使用方式如果函数内有throw,函数声明必须使用throws关键字声明,也就是说 thorw 和 throws 必须同时使用。 func readFile(at path: String) throws -> String { guard path != "" else { throw FileError.fileNotFou...…
-
11、可选链、协议、元数据
目录 可选链 协议的使用1 协议的使用2 class static 协议的使用3 mutating 协议使用4 init 协议的使用5 init? init! 协议的继承 系统提供的协议介绍 any和anyObject 其它总结 元数据的应用可选链/// 零、可选链func optionalChain() -> Void { class Car { var price = 0 } class Dog { var weight = 0 } ...…
-
10_2、初始化器(二)
目录 required的用法 属性观察器 可失败初始化器 反初始化器调用required的用法/// 一、required的用法func requiredUse() -> Void { /** 用required修饰指定初始化器,表明其所有子类必须都实现该初始化器(通过继承或重写) 如果子类重写该初始化器必须加上required,不用加override */ class Person{ var age:Int ...…
-
10_1、初始化器(一)
目录 多态分析 初始化器分类 初始化器使用注意 自动继承初始化器多态分析/// 一、多态分析func PolymorphismAnaly(){ class Animal{ func speak () -> Void { print("Animal speak") } func eat() -> Void { print("Animal eat") }...…
-
9_2、方法、下标、继承(二)
目录 下标使用 继承的使用 重写 为父类添加属性观察器 final使用下标使用/// 一、下标使用func subscriptUse(){ //1、下标使用 do{ print("-------1----------") class Point{ var x=0,y=0 static var z = 0 subscript(index:Int)...…
-
9_1、方法、下标、继承(一)
目录 实例方法 类型方法 mutating的用法 discardableResult的使用 汇总 结构体 类 枚举实例方法 类型方法func functionExplain(){ /** 枚举、结构体、类都可以定义实例方法、类型方法 实例方法(Instance Method):通过实例对象调用 类型方法(Type Method):通过类型调用,用static或者class关键字定义 self的作用 ...…
-
8_2、属性(二)
目录 inout的本质 属性分类inout的本质func inoutAssemblyAnaly() -> Void { struct Shape{ var width:Int var side:Int{ willSet{ print("willSetSide",newValue) } didSet{ print("...…
-
8_1、属性(一)
目录 实例说明 存储属性 计算属性 rawValue的本质是 延迟存储属性 属性观察器实例说明func instanceExplain(){ //枚举 enum Season{ case spring,summer,autumn,winter } let s = Season.spring //结构体 struct Point{ var x:Int = 0 var y:...…
-
7、闭包表达式(二)
目录 函数汇编分析 闭包汇编分析 闭包分析 数组相关 自动闭包 测试函数汇编分析/// 一、函数汇编分析func functionAnalyInAssembly() { // 0x100007570 func sum (_ v1:Int,_ v2:Int)->Int{ v1+v2//0x100006d20 0x100006d72 } var fn = sum print(MemoryLayout.size(ofVa...…
-
6、闭包表达式(一)
目录 闭包表达式 闭包表达式在数组中应用 闭包闭包表达式/// 一、闭包表达式func closureExpression(){ /* 在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 */ //1、函数作为参数 do{ func execute (_ x:Int,_ y:Int,fn:(Int,Int)->Int){ print(fn(x,y)) ...…
-
5_2、结构体和类(二)
目录 值类型、引用类型的let 结构体、类、枚举内部都可以定义方法 嵌套类型分析 内存段分析值类型、引用类型的letfunc letAnaly() { //1、let 分析(修饰值类型) struct Point{ var x:Int var y:Int } let p = Point(x:10,y:20) print(MemoryLayout.size(ofValue: p)) //常量p 内存内存储的是值类...…
-
5_1、结构体和类(一)
目录 结构体 类 结构体和类的本质区别结构体在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分 比如Bool、Int、Double、 String、Array、Dictionary等常见类型都是结构体 struct Date { var year: Int var month: Int var day: Int } var date = Date(year: 2019, month: 6, day: 23)所有的结...…
-
4、枚举汇编分析
目录 查看int类型的内存分布 查看枚举类型的内存分布(原始值的内存分布) 查看枚举类型的内存分布(关联值的内存分布) 特殊情况 switch汇编分析查看int类型的内存分布func memoryAnalyForInt() { //查看变量地址 //view Memory of " " //Debug - Debug WorkFlow - View Memory var age:Int = 10 print(MemoryLayout.size...…
-
3_2、可选项
目录 可选项 强制解包 可选项绑定 空合并运算符 guard语句 隐式解包 字符串插值 多重可选项可选项可选项,一般也叫可选类型,它允许将值设置为nil 在类型名称后面加个问号 ? 来定义一个可选项func optionalUse() -> Void { //1、设置nil //直接设置 nil会报错 //var name:String = nil //name可存储两种类型 String和nil var name:String? ...…
-
3_1、枚举
目录 枚举的基本用法 枚举关联值 枚举原始值 递归枚举 memorylayout的使用枚举的基本用法1、定义方式1enum Direction{ case north case south case east case west}var dir = Direction.westdir = Direction.eastdir = .northprint(dir)2、定义方式2enum Direction2{ case north,south,east,...…
-
2_2、函数
目录 函数的定义 函数的参数 print函数的使用 输入输出参数 函数重载 内联函数 函数类型 typealias 嵌套函数函数的定义1、函数的定义//形参默认是let 也只能是letfunc sum(num1: Int,num2: Int) -> Int{ return num1 + num2 //num1 + num2 //隐式返回}//调用时 num1 与 num2 必须得写print(sum(num1:10,num2:20))2、无返回值func...…
-
2_1、流控制
目录 if else while循环 for循环 swich where 标签语句if elsefunc ifElseExpression() -> Void { /** if 后面的条件可以省略小括号 条件后面的大括号不可以省略 if后面的条件只能是Bool类型 */ //1、小括号可以省略、大括号不可以省略 do{ let age = 18 if age<18 { ...…
-
1、基础语法
目录 常量 常见数据类型 类型转换 元祖分析常量常量只能赋值一次它的值不要求在编译时期确定,但在使用之前必须赋值1次一、只能赋值1次 下面两种方法都可以//方法一:let age1 = 10//方法二:let age2:Intage2 = 10//会报错 Cannot assign to value: 'age1' is a 'let' constant//age2 = 20 二、在使用之前必须赋值一次let age2:Int//不赋值使用会报错 Constant 'age2' u...…
-
调试流程⭐️
目录 调试的核心角色 调试流程 常见调试命令(LLDB)调试的核心角色一、在 iOS 调试中,主要涉及以下关键组件:Xcode 提供 IDE 和调试界面(断点、变量窗口、控制台)。 负责编译、打包、符号文件管理、与设备通信。LLDB(Low Level Debugger) Apple 默认调试器(替代 GDB)。 命令解析、符号解析(用 dSYM)、断点管理、格式化输出(变量、对象)、提供给 Xcode UI。debugServer(运行在设备上) iOS 设备上的代...…