Swift
玉树临风你卓哥
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
Swift --- 目录
Swift — swfitcSwift — 属性(property)和输入输出参数(inout)Swift — 下标(subscript)Swift — 方法前缀,以及nonmutatingSwift — 初始化器相关(Initialize)Swift — 继承(Inheritance)Swift — 协议(protocol)Swift — 扩展(Ex...原创 2019-09-20 14:54:32 · 627 阅读 · 0 评论 -
Swift --- 标准库源码分析
Swift源码简介Swift于2015年正式开源,github地址:https://github.com/apple/swift几个可能会经常看的目录docs:一些文档stdlib:Swift源码lib:C++源码include:C++头文件标准库源码位置:https://github.com/apple/swift/tree/master/stdlib/public/co...原创 2019-10-18 16:01:38 · 345 阅读 · 0 评论 -
从OC到Swift(1)- Swift小知识点
MARK、TODO、FIXME条件编译打印系统版本检测API可用性说明原创 2019-09-18 14:01:31 · 166 阅读 · 0 评论 -
从OC到Swift(2)- OC和Swift相互调用
OS程序的入口在AppDelegate上面默认有一个@UIApplicationMain标记,这标识编译器自动生成入口代码(main函数代码),自动设置AppDelegate为APP的代理也可以删掉@UIApplicationMain,自定义入口代码:新建一个main.swift文件import UIKitclass MyApplication: UIApplication {}UI...原创 2019-09-18 14:06:18 · 362 阅读 · 0 评论 -
从OC到Swift(3)- String和NSString
StringSwift的字符串类型String,跟OC的NSString,在API设计上还是有较大差异// 空字符串var emptyStr1 = ""var emptyStr2 = String()var str: String = "1"// 拼接,jack_rosestr.append("_2")// 重载运算符 +str = str + "_3"// 重载运算符 ...原创 2019-09-18 14:11:05 · 421 阅读 · 0 评论 -
从OC到Swift(4)- 协议
只能被class继承的协议protocol Runnable1: AnyObject {}protocol Runnable2: class{}@objc protocol Runnable3 {}被@objc修饰的协议,还可以暴露给OC去遵守实现可选协议可以通过@objc定义可选协议,这种协议只能被class遵守@objc protocol Runnable { ...原创 2019-09-18 14:19:06 · 223 阅读 · 0 评论 -
从OC到Swift(5)- 动态性,KVC\KVO
dynamic被@objc dynamic 修饰的内容会具有动态性,比如调用方法会走runtime那一套流程class Dog: NSObject { @objc dynamic func test1() {} func test2() {}}var d = Dog()d.test1()d.test2()对应汇编KVC\KVOSwift支持KVC...原创 2019-09-18 14:23:52 · 866 阅读 · 0 评论 -
从OC到Swift(6)- 关联对象
关联对象(Associated Object)在Swfit中,class依然可以使用关联对象默认情况,extension不可以增加存储属性的借助关联对象,可以实现类似extension为class增加存储属性的效果class Person {}extension Person { private static var AGE_KEY: Void? var age: I...原创 2019-09-18 14:24:35 · 187 阅读 · 0 评论 -
从OC到Swift(7) - 资源名管理
参考Android的资源名管理方法let img = UIImage(named: "logo")let btn = UIButton(type: .custom)btn.setTitle("添加", for: .normal)performSegue(withIdentifier: "login_main", sender: self)let img = UIImage(R.im...原创 2019-09-18 14:27:50 · 117 阅读 · 0 评论 -
从OC到Swift(8) - 多线程
多线程开发 - 异步public typealias Task = () -> Voidpublic class Asyncs { public static func async(_ task: @escaping Task) { _async(task) } public static func async(_ task: @escaping ...原创 2019-09-18 14:29:57 · 141 阅读 · 0 评论 -
Swift --- swfitc
1.生成可执行文件swiftc -o main.out main.swift//将main.swift文件生成main.out可执行文件 ./main.out //运行main.out可执行文件2.生成抽象语法树swiftc main.swift -dump-ast//将main.swift文件生成抽象语法树,并打印出来3.生成swift中间语言swiftc m...原创 2019-09-12 12:33:56 · 257 阅读 · 0 评论 -
Swift --- 方法前缀,以及nonmutating
方法前缀 @discardableResult 忽略返回值(消除不用返回值的警告) static 类型方法(引用类型class中,不可继承,不可与mutating组合) class 类型方法(只能修饰引用类型class,可以继承,不可与mutating组合) ...原创 2019-09-12 12:36:26 · 577 阅读 · 0 评论 -
Swift --- 属性(property)和输入输出参数(inout)
Swift中跟实例相关的属性可分为两大类存储属性:类似于成员变量这个概念存储在实力的内存中结构体、类可以定义存储属性枚举不可以定义存储属性计算属性本质就是方法(函数)不占用实力的内存枚举、结构体、类都可以定义计算属性struct Circel { // 存储属性 var radius: Double // 计算属性 var dia...原创 2019-09-12 12:49:41 · 920 阅读 · 0 评论 -
Swift --- 继承(Inheritance)
值类型(enum/struct)不支持继承,只有class支持继承没有父类的类,称为:基类Swift并没有像OC、Java那样的规定:任何类最终都要继承自某个基类子类可以重写父类的下标、方法、属性,重写必须加上override关键字内存结构:申请的内存大小必须是16字节的倍数8个字节内存信息,8个字节引用计数相关信息,再往后就是成员变量重写实例方法、下标:重写...原创 2019-09-12 16:40:08 · 167 阅读 · 0 评论 -
Swift --- 下标(subscript)
1.subscript可以给任意类型(class/struct/enum)添加下标功能2..subscript中定义的返回值类型决定了get方法的返回值类型set方法中newValue的类型3.subscript可以接受多个参数,并且类型任意subscrip(v1: Int, v2: Int) -> Int4.subscript可以没有set方法,但必须要有get方...原创 2019-09-12 12:39:01 · 593 阅读 · 0 评论 -
Swift --- 模式(Pattern)
什么是模式?模式是用于匹配的规则,比如switch的case、捕捉错误的catch、if\guard\while\for语句的条件等Swift中的模式有:通配符模式(Wildcard Pattern)标识符模式(Identifier Pattern)值绑定模式(Value-Binding Pattern)元组模式(Tuple Pattern)枚举Case模式(Enu...原创 2019-09-18 16:38:22 · 416 阅读 · 0 评论 -
Swift --- 初始化器相关(Initialize)
类、结构体、枚举都可以定义初始化器每个类至少有一个指定初始化器, 指定初始化器是类的主要初始化器1.类有两种初始化器:指定初始化器(designated initializer)、便捷初始化器(convenienceinitializer)2.默认初始化器总是类的指定初始化器3.类偏向于少量指定初始化器,一个类通常只有一个指定初始化器初始化器的相互调用规则:1.指定初始化...原创 2019-09-12 13:07:51 · 564 阅读 · 0 评论 -
Swift --- 错误处理(Error):throws、断言assert、fatalError
Swift中可以通过Error协议自定义运行时的错误信息enum SomeError : Error { case illegalArg(String) case outOfBounds(Int, Int) case outOfMemory}函数内部通过throw抛出自定义Error,可能会抛出Error的函数必须加上throws声明func divide...原创 2019-09-12 16:49:18 · 2504 阅读 · 0 评论 -
Swift --- 关键字(Any、AnyObject;is、as?、as!、as;X.self、X.Type、AnyClass)
关键字Any、AnyObjectSwift提供了两种特殊的类型:Any、AnyObjectAny:可以代表任意类型(枚举、结构体、类,也可以包括函数类型)范围更广,代表除函数外任何类型的实例。不仅包含object对象,还包含基本类型。AnyObject:可以代表任意类类型(在协议后面写上:AnyObject代表只有类能遵守这个协议)代表任何class类型的对象实例关键字is、...原创 2019-09-18 16:51:38 · 729 阅读 · 0 评论 -
Swift --- 泛型(Generics)和关联类型(Associated Type)
泛型可以将类型参数化,提高代码复用率,减少代码量 func swapValues<T>(_ a: inout T, _ b: inout T) { (a, b) = (b, a) } var n1 = 10 var n2 = 20 swapValue(&n1, &n2)泛型函数赋值给变量var fn:...原创 2019-09-12 13:21:22 · 2284 阅读 · 0 评论 -
Swift --- 汇编分析(String,Array)
汇编调试常用手段LLDB读取寄存器的值:register read rax/格式(x/f/d )register write rax 10register read //所有寄存器读取内存地址:x/5xgx 内存地址x/3xw 3-显示3组数据x-是16进制 /f是浮点/d是十进制w(word)4个字节/ g(giant)-8个字节/b(byte)-1个字节/...原创 2019-09-12 13:28:18 · 1174 阅读 · 0 评论 -
Swift --- 高级运算符
溢出运算符(Overflow Operator)Swift的算数运算符出现溢出时会抛出运行时错误Swift有溢出运算符(&+、&-、&*),用来支持溢出运算符运算符重载struct Point { var x = 0, y = 0 static func + (p1: Point, p2: Point) -> Point { ...原创 2019-09-12 13:35:47 · 173 阅读 · 0 评论 -
Swift --- 扩展(Extention)
Swift这种的扩展,有点类似于OC中的分类(Category)扩展可以为枚举、结构体、类、协议添加新功能可以添加方法、计算属性、下标、(便捷)初始化器、嵌套类型、协议等等扩展不能办到的事情1.不能覆盖原有的功能2.不能添加存储属性,不能向已有的属性添加属性观察器3.不能添加父类4.不能添加指定初始化器,不能添加反初始化器扩展计算属性扩展下标不能覆盖原有功能...原创 2019-09-12 13:56:52 · 543 阅读 · 0 评论 -
Swift --- 协议(protocol)
协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之间用逗号隔开)protocal Drawable { func draw() var x: Int { get set } var y: Int { get } subscript(index: Int) -> Int { get set }}协议中定义方法时不能有...原创 2019-09-12 16:36:17 · 229 阅读 · 0 评论 -
Swift --- 可选链(Optional Chaining)
如果可选项为nil,调用方法、下标、属性失败,结果为nil如果可选项不为nil,调用方法、下标、属性成功,结果会被包装成可选项如果结果本来就是可选项,不会进行再次包装多个?可以链接在一起如果链中任何一个节点是nil,那么整个链就会调用失败我们回顾一下可选类型,当你要使用可选类型的时候,首先必须要对其进行解包。但是存在一个问题就是,如果对一个为nil的可选类型进行强制解包...原创 2019-09-18 16:59:36 · 261 阅读 · 0 评论 -
编程范式 --- 面向协议编程(Protocol Oriented Programming,简称POP)
面向协议编程(Protocol Oriented Programming,简称POP)是Swift的一种编程范式,Apple于2015年WWDC踢出在Swift的标准库中,能见到大量POP的影子同时,Swift也是一门面向对象的编程语言(Objec Oriented Programming,简称OOP)在Swift开发中,OOP和POP是相辅相成的,任何一方并不能取代另...原创 2019-09-29 14:24:35 · 509 阅读 · 0 评论 -
Swift --- 可选项本质
可选项的本质是enum类型public enum Optional<Wrapped> : ExpressibleByNilLiteral { case none case some(Wrapped) public init(_ some: Wrapped)}var age: Int? = 10var age0: Optional<Int>...原创 2019-09-23 17:44:01 · 243 阅读 · 0 评论 -
Swift --- 内存管理
跟OC一样,Swift也是采取基于引用技术的ARC内存管理方案(针对堆空间)Swift的ARC中有3中引用:强引用(strong reference):默认情况下,引用都是强引用弱引用(weak reference):通过weak定义弱引用必须是可选类型的var,因为实力销毁后,ARC户自动将弱引用设置为nilARC自动给弱引用设置nil时,不会触发属性观察器无主引用...原创 2019-09-23 17:14:16 · 213 阅读 · 0 评论 -
Swift --- 指针
Swift中也有专门的指针类型,这些都被定性为“Unsafe”(不安全的),常见的有以下4种类型:UnsafePointer 类似于 const Pointee *UnsafeMutablePointer 类似于 Pointee *UnsafeRawPointer 类似于 const void *UnsafeMutableRawPointer 类似于 void *var age ...原创 2019-09-23 16:07:14 · 245 阅读 · 0 评论 -
编程范式 --- 函数式编程(Funtional Programming,简称FP)
函数式编程(Funtional Programming,简称FP)是一种编程范式,也就是如何编写程序的方法论主要思想:把计算过程尽量分解成一系列可复用函数的调用主要特征:函数是“第一等公民”:函数与其他数据类型一样的地位,可以赋值给其他变量,也可以作为函数参数、函数返回值函数式编程最早出现在LISP语言,绝大大部分的代码编程语言也对函数式编程做了不同程度的支持,比如:Haskel...原创 2019-09-23 15:25:54 · 1965 阅读 · 1 评论 -
Swift --- Optional的map和flatMap
Optional的map和flatMapvar num1: Int? = 10// Optional(20)var num2 = num1.map { $0 * 2 }var num3: Int? = nil// nilvar num4 = num3.map { $0 * 2 }var num1: Int? = 10// Optional(Optional(20))var n...原创 2019-09-22 17:12:52 · 387 阅读 · 0 评论 -
Swift --- Array的常规操作
Array的常规操作:var arr = [1, 2, 3, 4]// [2, 4, 6, 8]var arr2 = arr.map{ $0 * 2 }// [2, 4]var arr3 = arr.filter{ $0 % 2 == 0 }// 10var arr4 = arr.reduce(0) { $0 + $1 }// 10var arr5 = arr.reduce(0,...原创 2019-09-22 17:12:26 · 104 阅读 · 0 评论 -
从OC到Swift - 目录
从OC到Swift(1)- Swift小知识点从OC到Swift(2)- OC和Swift相互调用从OC到Swift(3)- String和NSString从OC到Swift(4)- 协议从OC到Swift(5)- 动态性,KVC\KVO-## 从OC到Swift(6)- 关联对象从OC到Swift(7)- 资源名管理从OC到Swift(8)- 多线...原创 2019-09-20 09:20:15 · 297 阅读 · 0 评论 -
Swift --- 字面量(Literal)
var age = 10var isRed = falsevar name = "Jack"上面代码中的10、false、"Jack"就是字面量常见的字面量的默认类型:public typealias IntegerLiteralType = Intpublic typealias FloatLiteralType = Doublepublic typealias Boole...原创 2019-09-20 14:52:59 · 454 阅读 · 0 评论