Combine 框架,从0到1 —— 3.使用 Subscriber 控制发布速度

| Swift , iOS , Combine

对于大多数响应式编程场景而言,订阅者不需要对发布过程进行过多的控制。当发布者发布元素时,订阅者只需要无条件地接收即可。但是,如果发布者发布的速度过快,而订阅者接收的速度又太慢,我们该怎么解决这个问题呢?Combine 已经为我们制定了稳健的解决方案!现在,让我们来了解如何施加背压(back pressure)以精确控制发布者何时生成元素。

Combine 框架,从0到1 —— 2.通过 ConnectablePublisher 控制何时发布

| Swift , iOS , Combine

使用 Connectable Publisher, 你可以决定发布者何时开始发送订阅元素给订阅者。那么,为什么我们需要这么做?使用 sink(receiveValue:) 可以立刻开始接收订阅元素,但是这可能不是你想要的结果。当多个订阅者订阅了同一个发布者时,有可能会出现其中一个订阅者收到订阅内容,而另外一个订阅者收不到的情况。在使用 Combine 的过程中,我们往往需要面对这些问题。现在就来弄清楚如何处理这一类问题吧~

Combine 框架,从0到1 —— 1.核心概念

| Swift , iOS , Combine , MVVM , Rx

未来已来,只是尚未流行!响应式编程这个名词已经久负盛名,但是在实际项目中采用了响应式编程的公司其实不多。如果您有 iOS 开发经历,那么您多半听说过 RxSwift,而 Rx 源自微软。提到Rx,往往也会提到源自微软的 MVVM模式。 不过,本文不会讲解 MVVM。 由于 Combine 借鉴了 Rx 的思想,二者具有基本相同的特性,所以本文会同时讨论这两个大框架。 而且,如果有必要的话,我们可以通过学习开源的 RxSwift 源码来了解 Combine 的工作原理。您甚至可以这么简单粗暴的认为:Combine 就是苹果官方的 RxSwift。😅

Swift self, Self, ==, === 傻傻分不清楚?

| Swift , iOS

在2014年开源之后,Swift就在飞速地茁壮成长,内涵也越来越丰富。 对于实际使用Swift的人来说,概念多了就比较容易混淆😨,然后就会导致开发效率低下。毕竟,你需要去查这些概念的正确定义,或者你需要去自行验证。self, Self, ==, === 就是比较典型的例子。 在面试别人的过程中,我发现有很多朋友分不清楚这些概念。所以,我打算根据我自己的理解来梳理一下这些概念,希望能够帮大家少走一些弯路。🌟🌟🌟

优秀工程师提升能力的思考方法 ——《阿里工程师的自我修养》阅读笔记

| 阅读笔记

内容概览:技术成长的误区、思考力、对程序员最重要的思考力、锻炼思考力的有效实践总结。 下载目录修正版《阿里工程师的自我修养》,学习10位阿里大牛解决问题的思维方式。 【原理性思维】:找出知识背后的原理;【结构化思维】:构建自己的知识树;【扩展性思维】:举一反三,拓展思维;【抓重点思维】:提升效率,方便记忆和传递;【反思性思维】:思考哪里可以做得更好;

优秀工程师必备的三大思维 ——《阿里工程师的自我修养》阅读笔记

| 阅读笔记

内容概览:产品思维、技术思维、工程思维、延伸。 下载目录修正版《阿里工程师的自我修养》,学习10位阿里大牛解决问题的思维方式。 【产品思维】:痛点,有价值;体验,易用;特性,可售;效果,闭环。 【技术思维】:需求明确,功能完善,性能极致,交付及时,先进且有影响力。 【工程思维】:流程无缝,机制系统性,质量可靠,风险可控,成本低。 【延伸】:从多个维度去思考问题。

结构化思维 ——《阿里工程师的自我修养》阅读笔记

| 阅读笔记

内容概览:什么是结构化思维?如何进行结构化思考?结构化思维应用总结。 下载目录修正版《阿里工程师的自我修养》,学习10位阿里大牛解决问题的思维方式。 掌握一定数量的思维模型,能解决这世上90%的问题。 【结构化思维】:逻辑+套路,表达要有逻辑,做事要有套路。 【如何进行结构化思考】:建立中心、结构化分解。 【结构化思维应用】:新入职人员有效地开展工作、打造团队的极客文化、做晋升述职。

Swift 可选值 ——《Swift 进阶》阅读笔记

| Swift , 阅读笔记

本文大部分内容摘自《Swift 进阶》。 内容概览:1.哨岗值 2.通过枚举解决魔法数的问题 3.可选值概览 4.强制解包的时机 5.隐式解包可选值。 【哨岗值】:EOF, end(), NullPointerException, Error指针; 【通过枚举解决魔法数的问题】:enum Optional<Wrapped>; 【可选值概览】:if-let, while-let, Optional<Optional<Int>>, if-var, guard-else, nil/Void/Never, ?, ??; 【强制解包的时机】:!, fatalError, assert, precondition; 【隐式解包可选值】:var s: String!;

Swift didSet 为什么没有执行?🌚🌚🌚

| Swift , Bug

内容概览:初始化时在 didSet 中更改值、class 和 struct 中的 didSet; didSet 是 Swift 中比较常用的属性观察器,但是使用它需要注意一些问题。 didSet, 很容易被理解为:在设置新的值之后,didSet 马上就会被调用。 Swift 官方文档也是这么写的:在新值被存储后,didSet 会被立即调用。 果真是我们理解的这样吗?😹接下来,让我们一起来一探究竟吧~

构建个人博客网站(基于Python Flask)

| Web , 后端 , Python

文章概览:Sketch、HTML, CSS, JavaScript、Python & Flask & MySQL & SQLAlchemy、Gunicorn & Terminal & Command、Domain name、Nginx & Certbot。 你是否曾经尝试过搭建个人博客网站? Hugo, Hexo,WordPress 这些耳熟能详的产品,你是否也曾经试用过? 这些产品可以让你极速搭建个人博客网站,而且你不需要了解太多技术细节。 如果你只是想有一个简单的博客网站,只是希望能够进行内容创作、发表,那么我建议你使用那些产品并停止阅读这篇文章。 如果你想DIY你的博客、想更深入地了解一个博客系统、想学习一些Web和后端技术,那么我建议你继续阅读,然后自己搭建一个博客网站! 为何选择 Python 和 Flask 进行后端开发?我相信,很多人都听说过这句话:【人生苦短,我用Python】。用Python做开发,确实可以让你更专注于业务逻辑。 Not now, when? 😼 现在就用 Python 来构建一个属于自己的博客吧!!!