自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 收藏
  • 关注

原创 IOS RXSwift实现双向绑定国际化登录界面

这是一个RXSwift比较典型的使用示例,借鉴了一些知名的开源项目,主要使用到的三方库有Localize-Swift(国际化)、RXSwift和Alamofire。2)视频看起来会有点模糊残影,主要是没找到好的视频转gif工具,有好的视频转gif工具可以推荐下。1)点击登录跳到下一个白色页面就代表登录成功,成功页面比较懒就不写了。

2023-04-26 00:06:47 366

原创 React Native 分包及在iOS端分包加载

但是我司的项目是在Hybrid的基础上添加React Native模块,还需要热更新, 为了每次热更新包的大小是尽可能小的, 所以需要使用分包加载。3. 还有一个比较重要的点,由于公共包和业务包是分开加载的,需要加载完公共包再加载业务包,还要求速度要尽可能快,网上有些说一启动App就用初始化Bridge加载公共包,我认为这是一种很懒的处理方式,会很耗性能,我这里采用的是监听加载完公共包的通知,一旦收到加载完公共包的通知,就开始加载业务包。我这里使用的是基于Metro的分包方法,也是市面上主要使用的方法。

2023-04-02 21:56:03 1258

原创 RXSwift在项目中实战总结: Subject, Driver, 高阶函数

RXSwift在项目中经常使用的类和方法已经大体介绍完了,如果感觉有用的话,点个Star吧!

2023-03-28 11:42:04 685

原创 RXSwift进阶:RXSwift的底层核心逻辑解析

在上一篇的RXSwift基础介绍篇,我们已经知道RXSwift的基础用法大致分成四步:1. 创建可观察序列2. 监听序列(订阅序列发出的信号)3. 销毁序列。

2023-03-21 17:32:08 633

原创 iOS 基于LinPhone的语音通话

因为不是我做的后台,我只能做简要的介绍,我们后台使用的语言是C++,如果不想付出太高的成本,又有比较高的效率, C++无疑是很好的选择。在语音通话过程中,客户端与后台会进行三大类型的交互:1.向主管账号信息的服务器发送请求交互,获取与第二个服务器进行第二类和第三类交互要使用的数据模型2.根据第一类与服务器交互获取的数据模型,LinPhoneSDK与服务器进行第二类交互,建立UDP链接,用于语音通话。

2023-03-20 14:05:56 1286

原创 Swift学习:项目实战要点(常用三方库及使用,Unit Test单元测试)

常用的Swift第三方库网络请求:https://github.com/Alamofire/Alamofire 图片下载:https://github.com/onevcat/Kingfisher JSON访问:https://github.com/SwiftyJSON/SwiftyJSON JSON-Model转换:https://github.com/kakaopensourc...

2019-09-01 10:49:49 716

原创 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...

2019-08-31 19:07:22 971 2

原创 Swift学习:响应式编程RxSwift

响应式编程响应式编程(Reactive Programming,简称RP)也是一种编程范式,于1997年提出,可以简化异步编程,提供更优雅的数据绑定 一般与函数式融合在一起,所以也会叫做:函数响应式编程(Functional Reactive Programming,简称FRP)比较著名的、成熟的响应式框架 ReactiveCocoa简称RAC,有Objective-C、Swift...

2019-08-26 23:25:26 507

原创 Swift(学习): 面向协议编程

面向协议编程面向协议编程(Protocol Oriented Programming,简称POP)是Swift的一种编程范式, Apple于2015年WWDC提出 在Swift的标准库中,能见到大量POP的影子同时,Swift也是一门面向对象的编程语言(Object Oriented Programming,简称OOP) 在Swift开发中,OOP和POP是相辅相成的,任何一方并...

2019-08-20 23:11:59 361

原创 Swift(学习):函数式编程

Array的常见操作Array的map函数:var arr = [1, 2, 3, 4]//map映射, 你传入Int,它可以返回Int数组,也可以返回字符串数组var arr2 = arr.map { i in return 2 * I}var arr3 = arr.map{ $0 * 2 }var arr33 = arr.map{"abc_\($0)"}...

2019-08-17 18:28:26 454

原创 Swift:从OC到Swift

只能被class(类)继承的协议只能被class(类)继承的协议有三种:继承自AnyObject 继承自class 被@objc修饰的类protocol Runnable1: AnyObject { }protocol Runnable2: class { }@objc protocol Runnable3 { }struct Animal: Runnable1 { } //...

2019-08-10 19:44:33 255

原创 Swift学习: String,Swift与OC的桥接

Swift的字符串类型String,跟OC的NSString,在API设计上还是有较大差异//空字符串var emptyStr1 = ""var emptyStr2 = String()var str1: String = "1"str1.append("_2") //"1_2"str1 = str1 + "_3" //"1_2_3"str1 += "_4" //"1_2_3...

2019-08-10 00:14:21 391

原创 Swift(学习):从OC到Swift

MARK、TODO、FIXME// MARK:类似于OC中的#pragma mark // MARK: -类似于OC中的#pragma mark - //TODO:用于标记未完成的任务 // FIXME:用于标记待修复的问题 #warning: 用于标记未完成的任务或需要提醒的任务 左边在代码中写的标记,当你点击上方的结构栏会相应展示成右边那样左边在代码中写的...

2019-08-03 23:42:46 353

原创 Swift(学习):模式匹配

模式(Pattern)什么是模式? 模式是用于匹配的规则,比如switch的case、捕捉错误的catch、if\guard\while\for语句的条件等 Swift中的模式有通配符模式(Wildcard Pattern) 标识符模式(Identifier Pattern) 值绑定模式(Value-Binding Pattern) 元组模式(Tuple Pattern)...

2019-08-03 22:16:39 286

原创 Swift(学习):字面量

字面量(Literal)上面代码中的10、false、"Jack"就是字面量常见字面量的默认类型public typealiasIntegerLiteralType=Int public typealiasFloatLiteralType=Double publictypealiasBooleanLiteralType=Bool public typ...

2019-08-03 14:50:32 324

原创 Swift学习:内存管理,weak,unowned,autoreleasepool,循环引用,escaping,指针

内存管理跟OC一样,Swift也是采取基于引用计数的ARC内存管理方案(针对堆空间)class Person { deinit { print("Person.deinit") }}print(1)var p: Person? = Person()print(2)p = nilprint(3)//输出结果为://1//2//Perso...

2019-07-28 19:38:14 985

原创 Swift(学习):访问控制

访问控制(Access Control)在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排列, 实体指被访问级别修饰的内容)open:允许在定义实体的模块(工程中所有创建的swift文件)、其他模块(三方库)中访问,允许其他模块进行继承、重写(open只能用在类、类成员上) public:允许在定义实体的模块、其他模块中访问,不允许其他模块进行继承、重写 inter...

2019-07-28 16:20:04 234

原创 Swift(学习):扩展(Extension,计算属性,下标,方法,嵌套类型,协议,初始化,泛型)

扩展(Extension)Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、结构体、类、协议添加新功能 可以添加方法、计算属性、下标、(便捷)初始化器、嵌套类型、协议等等 扩展不能办到的事情:要注意扩展不能改变原有类的内存结构不能覆盖原有的功能 不能添加存储属性,不能向已有的属性添加属性观察器 (添加存储属性会改变原有类的内存结构) 不能添加父类 ...

2019-07-27 16:22:28 674

原创 Swift学习(二十):高级运算符(溢出运算符,运算符重载,Equatable,Comparable,自定义运算符)

溢出运算符Swift的算数运算符出现溢出时会抛出运行时错误 Swift有溢出运算符(&+、&-、&*),用来支持溢出运算var umin = UInt8.min //0var umax = UInt8.max //255var min = Int8.min //-128var max = Int8.max //127print(umax &+...

2019-07-27 13:58:17 616

原创 Swift学习(十九): 可选项本质(多重可选项本质)

可选项的本质可选项的本质是enum类型这是底层可选项的代码,可以看出本质是enumvar age: Int? = 10 等价于以下四种:var age0: Optional<Int> = Optional<Int>.some(10)var age1: Optional = .some(10)var age2 = Optional.some(10)...

2019-07-24 22:35:04 507

原创 Swift学习:泛型,关联类型,类型约束,协议类型及错误解决,some

泛型(Generics)泛型可以将类型参数化,提高代码复用率,减少代码量func swapValues<T>(_ a: inout T, _ b: inout T) { (a, b) = (b, a)}var i1 = 10var i2 = 20swapValues(&i1, &i2)print(i1, i2) // 20, 10 i1和i2...

2019-07-21 21:23:28 1136

原创 Swift(学习):错误处理(自定义错误,do-catch捕捉错误,处理Error,try?,try1,rethrows,defer,assert,fatalError)

错误类型开发过程常见的错误:语法错误(编译报错) 逻辑错误 运行时错误(可能会导致闪退,一般也叫做异常 ......自定义错误Swift中可以通过Error协议自定义运行时的错误信息enum SomeError : Error { case illegalArg(String) case outOfBounds(Int, Int) case outO...

2019-07-20 23:56:27 1172

原创 Swift学习(十六):协议(protocol,static,class,mutating,init,init?,init!,继承,协议组合,as?,as!,Any,AnyObject,Self)

协议(Protocol)协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之间用逗号隔开)协议中定义方法时不能有默认参数值 默认情况下,协议中定义的内容必须全部都实现 也有办法可以办到只实现部分内容协议中的属性协议中定义属性时必须用var关键字 实现协议时的属性权限要不小于协议中定义的属性权限 协议定义get、set,用var存储属性或g...

2019-07-19 22:26:17 772

原创 Swift学习(十五):可选链

可选链(Optopnal Chaining)可选项的返回值也是可选型如果可选项为nil,调用方法、下标、属性失败,结果为nil 如果可选项不为nil,调用方法、下标、属性成功,结果会被包装成可选项 如果结果本来就是可选项,不会进行再次包装可选项调用无返回值的方法的结果可以为nil,也可以为可选型空元组()?,比如person?.eat(),当person为nil,则结果...

2019-07-18 15:44:39 182

原创 Swift学习(十四):初始化(指定初始化器,便捷初始化器,初始化器的相互调用,初始化器的重写,属性观察器,可失败初始化器,反初始化器(deinit))

初始化器类、结构体、枚举都可以定义初始化器 类有2种初始化器:指定初始化器(designated initializer)、便捷初始化器(convenience initializer) 每个类至少有一个指定初始化器,指定初始化器是类的主要初始化器 默认初始化器总是类的指定初始化器 ,当你没写新的指定初始化器,会自带默认初始化器,一旦自己写了新的指定初始化器,默认初始化器就自动消失,...

2019-07-14 23:43:10 724

原创 Swift 学习(十三):多态(实现原理)

多态:父类指针指向子类对象多态的实现原理:OC: RuntimeC++: 虚表(虚函数表)Swift:类似于虚表多态代码:class Animal { func speak() { print("Animal speak") } func eat() { print("Animal eat") } f...

2019-07-13 19:10:27 762

原创 Swift学习(十二):继承(内存结构,override重写,多态,属性观察器,final)

继承(Inheritance)值类型(枚举、结构体)不支持继承,只有类支持继承 没有父类的类,称为:基类 Swift并没有像OC、Java那样的规定:任何类最终都要继承自某个基类 子类可以重写父类的下标、方法、属性,重写必须加上override关键字内存结构Dog继承自Animal,也就拥有了age属性, Dog实际占用的内存空间是32个字节,其中指针类型8个字节...

2019-07-13 18:56:02 369

原创 Swift学习(十一):下标(结构体和类作为下标返回值的对比)

下标(subscript)使用subscript可以给任意类型(枚举、结构体、类)增加下标功能,有些地方也翻译为:下标脚本 subscript的语法类似于实例方法、计算属性,本质就是方法(函数),(语法书写方式[ ])p[0] = 11.1的赋值原理是调用了subscript的setter方法,反汇编代码如图:同理可得:print(p[0])的获取值的原理是调用了subsc...

2019-07-13 15:37:05 300

原创 Swift学习(十):方法(实例方法,类型方法,mutating,@discardableResult)

方法(Method)枚举、结构体、类都可以定义实例方法、类型方法实例方法(Instance Method):通过实例对象调用,相当于OC中的对象方法 类型方法(Type Method):通过类型调用,用static或者class关键字定义,相当于OC中的类方法selfself在实例方法中代表实例对象 self在类型方法中代表类型 在类型方法static funcgetCo...

2019-07-13 13:33:53 264

原创 Swift学习(九):属性(存储属性,计算属性,延迟存储属性,属性观察器,inout,实例属性,类型属性,单例模式)

属性分类Swift中跟实例相关的属性可以分为2大类:存储属性(Stored Property)类似于成员变量这个概念 存储在实例的内存中 结构体、类可以定义存储属性 枚举不可以定义存储属性计算属性(Computed Property)本质就是方法(函数) 不占用实例的内存 枚举、结构体、类都可以定义计算属性由反汇编我们可以看出,只有radius这个存储...

2019-07-12 18:58:38 430 1

原创 Swift学习(八):闭包(闭包表达式,尾随闭包,闭包的定义,自动闭包)

闭包表达式(Closure Expression)可以通过func定义一个函数,也可以通过闭包表达式定义一个函数func函数闭包定义函数闭包表达式调用可以直接省略参数名闭包定义函数也可以写为:闭包表达式的结构闭包表达式的简写尾随闭包如果将一个很长的闭包表达式作为函数的最后一个实参,使用尾随闭包可以增强函数的可读性尾随闭包是一个被书写在函数调用...

2019-07-02 17:28:52 1574

原创 Swift学习(七):结构体、类与枚举的异同(初始化器,值类型,引用类型)

结构体在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分 比如Bool、Int、Double、String、Array、Dictionary等常见类型都是结构体在第6行调用的,可以传入所有成员值,用以初始化所有成员(存储属性,Stored Property)结构体的初始化器编译器会根据情况,可能会为结构体生成多个初始化器,宗旨是:保证所有成...

2019-06-28 19:12:58 528

原创 Swift学习(六):针对内存的研究--汇编

枚举的内存本质代码举例: enum TestEnum { case test1(Int, Int, Int) case test2(Int, Int) case test3(Int) case test4(Bool) case test5 }1个字节存储成员值 N个字节存储关联值(N取占用内...

2019-06-26 17:48:52 216

原创 Swift学习(五): 枚举(基本用法,关联值,原始值,递归枚举,MemoryLayout,可选项,强制解包,可选项绑定,空合并运算符??,隐式解包,多重可选项,guard)

枚举的基本用法 等价于 =>>使用:-------------------------------------------------------------------------------------------------------------------------------关联值(Associated Values)有时会将枚举的成员...

2019-06-24 20:04:59 735

原创 Swift学习(四):函数(定义,隐式返回,多返回值,参数标签,默认参数值,可变参数,inout输入输出参数,函数重载,内联函数,嵌套函数,typeslias)

函数的定义func: 声明这是一个函数sum:函数名(v1: Int, v2: Int): v1,v2是参数名, Int是参数类型-> Int:返回值为Intsum(v1: 10, v2: 20):调用函数,调用函数时有参数名(v1, v2)必须带着形参默认是let,也只能是let无返回值的函数->()表示返回值为空,()实际上是一个空元组...

2019-06-22 18:02:35 662

原创 Swift(三):流程控制(if-else, while, for, 区间类型, switch, 标签语句)

if-elseif后面的条件可以省略小括号 if条件后面的大括号不可以省略 if后面的条件只能是Bool类型----------------------------------------------------------------------------------------------------------------------...

2019-06-21 19:18:54 396

原创 Swift学习(二):基本语法(Playground,常量,标识符,常见数据类型,类型转换,元组)

Swift语法特性不用编写main函数,Swift将全局范围内的首句可执行代码作为程序入口 一句代码尾部可以省略分号(;),多句代码写到同一行时必须用分号(;)隔开 用var定义变量(变量可以多次赋值),let定义常量(常量不可以多次赋值),编译器能自动推断出变量\常量的类型 Playground可以快速预览代码效果,是学习语法的好帮手 Command + Shift ...

2019-06-17 23:47:35 363

原创 Swift学习(一) : 版本历史,编译流程

Swift历史历时5年发展,从Swift1.x发展到了Swift5.x版本,经历了多次重大改变,ABI终于稳定 API(ApplicationProgramming Interface):应用程序编程接口: 源代码和库之间的接口 ABI(Application Binary Interface):应用程序二进制接口:应用程序与操作系统之间的底层接口 涉及的内容有:目标文件格式、数据类...

2019-06-17 19:13:06 1900

原创 <table width="100%" border="0" cellspacing="0" cellpadding="0">

<table width="100%" border="0" cellspacing="0" cellpadding="0">这是表格的开始部分代码,表格的宽为100%,就是与浏览器等宽的,border表示表格的线宽为0即不显示表格线,cellspacing表示表格内数据与表格间隔为0,cellpadding表示单元格与单元格间隔为0,一般这个代码用于做网页的布局的。...

2019-06-13 17:38:03 3050

转载 用link标签实现 shortcut icon(给网页标题前添加一个小图标favicon.ico)

用link标签实现 shortcut icon给网页标题前添加一个小图标,例如给京东首页前添加如下的图标方法用link标签实现shortcut icon1、<link rel="shortcut icon " type="images/x-icon" href="./favicon.ico">其中favicon.ico需放在根目录下面(不提倡用这种方法,因为图片没...

2019-06-13 14:33:21 1802

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除