![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
swift5.1学习笔记
swift5.1学习
努力修福报
这个作者很懒,什么都没留下…
展开
-
swift和OC对比,Swift的核心思想:面向协议编程
面向对象or面向协议?传统的面向对象思维方式:有一只狗,有自己的名字, 可以跑有一只猫,有自己的名字, 可以跑有一个人,有自己的名字, 可以跑抽象出一个动物类, 之后, 将跑的行为放入动物类中如果需要一个吃的行为, 也可以抽象在动物类中面向对象开发弊端如果有一个机器人(一辆车), 也有跑的行为, 这个时候如何抽象呢, 显然该抽象方式并不是特别合理,弊端:继承链很长,代码高度耦合OC不能面向协议开发的原因是,OC中的协议只能有方法的声明,不能有方法的实现,而Swift可以通过协议拓展,来声明原创 2022-07-14 13:52:35 · 778 阅读 · 0 评论 -
swift5.1学习-1.基本语法
简介swift5的ABI已经基本稳定,说明以后的语法不会再有大的变化。swift的编译器前端是swiftc,OC的编译器前端是Clang。编译器后端是LLVM。编译器前端词法分析,生成语法树等。编译器后端生成对应平台的机器码。简单语法swift不用编写main函数,Swift将全局范围内的首句可执行代码作为程序入口一句代码尾部可以省略分号(????,多句代码写到同一行时必须用分号(;)隔开用var定义变量,let定义常量,编译器能自动推断出变量\常量的类型字符串格式化输出(变量或常量)原创 2022-02-01 14:41:33 · 326 阅读 · 0 评论 -
swift5.1学习-2.流程控制
1.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")}if后面的条件可以省略小括号条件后面的大括号不可以省略if后面的条件只能是Bool类型2.w原创 2022-02-01 15:39:17 · 623 阅读 · 0 评论 -
swift5.1学习-3.函数
1.函数的定义func pi() -> Double { return 3.14}func sum(v1: Int, v2: Int) -> Int { return v1 + v2}sum(v1: 10, v2: 20)2无返回值func sayHello() -> Void { print("Hello")} func sayHello() -> () { print("Hello")} func sayHello() {原创 2022-02-01 16:59:36 · 202 阅读 · 0 评论 -
swift5.1学习-4.枚举
1.枚举的基本用法定义enum Direction { case north case south case east case west }enum Direction { case north, south, east, west}使用var dir = Direction.westdir = Direction.eastdir = .northprint(dir) // northswitch dir {case .north:原创 2022-02-01 18:11:04 · 205 阅读 · 0 评论 -
swift5.1学习-5.可选项(Optional)
1.可选项定义可选项,一般也叫可选类型,它允许将值设置为nil在类型名称后面加个问号? 来定义一个可选项从字典中根据key来取值返回的是一个可选类型,需要使用可选绑定来解包。var name: String? = "Jack"name = nilvar age: Int? // 默认就是nil age = 10age = nil2.强制解包(Forced Unwrapping)可选项是对其他类型的一层包装,可以将它理解为一个盒子如果为nil,那么它是个空盒子如果不为nil,那么盒原创 2022-02-02 14:35:25 · 360 阅读 · 0 评论 -
swift5.1学习-6.结构体和类
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)所有的结构体都有一个编译器自动生成的初始化器(initializer,初始化方法、构造原创 2022-02-02 15:13:07 · 244 阅读 · 0 评论 -
swift5.1学习-7.闭包
1.闭包表达式(Closure Expression)在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数格式:{ (参数列表) -> 返回值类型 in 函数体代码}函数func sum(_ v1: Int, _ v2: Int) -> Int { v1 + v2 } var fn = { (v1: Int, v2: Int) -> Int in return v1 + v2}fn(10, 20)等价闭包var原创 2022-02-02 19:52:56 · 131 阅读 · 0 评论 -
swift5.1学习-8.属性,方法
1.Swift中跟实例相关的属性可以分为2大类存储属性(Stored Property)Swift有个明确的规定在创建类 或 结构体的实例时,必须为所有的存储属性设置一个合适的初始值1.可以在初始化器里为存储属性设置一个初始值2.可以分配一个默认的属性值作为属性定义的一部分类似于成员变量这个概念存储在实例的内存中结构体、类可以定义存储属性枚举不可以定义存储属性计算属性(Computed Property)本质就是方法(函数),实际就是封装的get和set方法不占用实例的内存原创 2022-02-02 20:42:13 · 262 阅读 · 0 评论 -
swift5.1学习-9.继承,可选链,协议
1.继承(Inheritance)值类型(枚举、结构体)不支持继承,只有类支持继承 n 没有父类的类,称为:基类Swift并没有像OC、Java那样的规定:任何类最终都要继承自某个基类子类可以重写父类的下标、方法、属性,重写必须加上override关键字2.重写实例方法、下标被class修饰的类型方法、下标,允许被子类重写被static修饰的类型方法、下标,不允许被子类重写class Animal { func speak() { print("Animal s原创 2022-02-04 17:16:16 · 371 阅读 · 0 评论 -
swift5.1学习-10.error
1.自定义错误Swift中可以通过Error协议自定义运行时的错误信息enum SomeError : Error { case illegalArg(String) case outOfBounds(Int, Int) case outOfMemory}函数内部通过throw抛出自定义Error,可能会抛出Error的函数必须加上throws声明func divide(_ num1: Int, _ num2: Int) throws -> Int { i原创 2022-02-04 18:07:47 · 592 阅读 · 0 评论 -
swift5.1学习-11.泛型(Generics)
1.泛型函数泛型可以将类型参数化,提高代码复用率,减少代码量func swapValues<T>(_ a: inout T, _ b: inout T)func swapValues<T>(_ a: inout T, _ b: inout T) { (a, b) = (b, a)}var i1 = 10var i2 = 20swapValues(&i1, &i2)var d1 = 10.0var d2 = 20.0swapValues(原创 2022-02-05 13:59:18 · 1477 阅读 · 0 评论 -
swift5.1学习-12.String和NSString
0.String 与 NSStringString 与 NSString 之间可以随时随地桥接转换如果你觉得String的API过于复杂难用,可以考虑将String转为NSString. 使用as转换oc中的数组和字典都可以抓换到swift,但是swift的不能转换到oc中的可变类型 var str1: String = "jack"var str2: NSString = "rose"var str3 = str1 as NSStringvar str4 = str2 as String原创 2022-02-06 17:39:06 · 2204 阅读 · 0 评论 -
swift5.1学习-13.从OC到Swift
1.注释标记MARK、TODO、FIXMEMARK: 类似于OC中的 #pragma markMARK: - 类似于OC中的 #pragma mark -TODO: 用于标记未完成的任务FIXME: 用于标记待修复的问题2.条件编译 // 操作系统:macOS\iOS\tvOS\watchOS\Linux\Android\Windows\FreeBSD #if os(macOS) || os(iOS)// CPU架构:i386\x86_64\arm\arm64#elseif arch(原创 2022-02-06 17:39:37 · 1694 阅读 · 0 评论 -
swift5.1学习-小知识
1.Any、AnyObjectSwift提供了2种特殊的类型:Any、AnyObjectAny:可以代表任意类型(枚举、结构体、类,也包括函数类型)AnyObject:可以代表任意类类型(在协议后面写上: AnyObject代表只有类才能遵守这个协议)在协议后面写上: class也代表只有类才能遵守这个协议2.is、as?、as!、asis用来判断是否为某种类型as用来做强制类型转换protocol Runnable { func run() } class Person {}cl原创 2022-02-04 17:15:40 · 255 阅读 · 0 评论