TDD(Test-driven development) 是我们常聊的一种开发方式,我曾在开发 BFF(Backend For Frontend) 时实践 TDD,大为受益,也在编写 iOS 的 ViewModel 层时略有实践,但除了 ViewModel 层以外的许多场景,我都困惑于怎么实践 TDD,所以我阅读了 iOS Test-Driven Development 这本书,希望能从中找...
iOS Combine:核心概念
Combine 是 iOS13 新加入的库,它的出现主要是为了解决当前我们在进行异步编程时遇到的痛点,各种 Delegate, Callback, Notification 混杂在我们的 App 中,导致异步事件混乱,难以调试代码,下图展示了当前常用的异步 API: 本图片来自 Combine 书籍 Combine 和 RxSwift 中的核心思想和概念是一致的,所以如果你使用过 Rx...
读《大话数据结构》
最近看了《大话数据结构》 这本书,补了补自己在这方面知识不够系统的欠缺,里面的概念还是挺多的。我尝试着以思维导图加说明的方式,来梳理一遍我所掌握的各种数据结构,希望能给大家带来一个更直观的认识。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。 算法 算法是解决特定问题求解步骤的...
读《程序员的职业素养》:The Clean Coder
这几天看了《The Clean Coder》:A code of Conduct for Professional Programmers 这本书,是《Clean Code》这本书的作者所著,有一些自己认为颇为受益的点,这里分享给大家。 每个专业软件开发人员必须精通的事项 设计模式。必须能描述 GOF 书中的全部 24 种模式,同时还要有 POSA 书中的多数模式的实战经验。 ...
iOS 动态库 Dynamic library
动态库可以在 app launch time 或者 runtime 被加载,也就是说代码可以只在需要的时候被加载,这就减少了可执行文件的大小和 App 启动时的内存消耗。 App 的功能本质是通过可执行代码来实现的,在使用静态库时,代码是被全部复制到了生成的可执行代码中去,并且在 App 启动的时候,一次性全部加载到内存中去,因此会使得文件变大,也更消耗内存。下图展示了静态库是如何被链接到...
iOS 地图 MapKit - 搜索与路径
使用地图来搜索感兴趣的地方,并且获取到达该地方的路径,想必是我们经常使用到的功能,那么在 MapKit 中如何实现呢,下面一起来看看吧。 写下该文章的时候,计算路径的 API 在国内还是不可用的,具体的可用区域可以查看 iOS and iPadOS Feature Availability 搜索 MapKit 中实现搜索功能的类是 MKLocalSearch,主要有三个方法: // ...
iOS 地图 MapKit - 显示与交互
我们在使用地图服务时,需要结合 Core Location 和 MapKit 两个框架,Core Location 主要是提供用户当前的位置和方向等信息,MapKit 用来显示地图、标注点、路径等信息。可以把 MapKit 理解为 View 层用来展示 Core Location 获取到的数据。 获取位置权限 在使用位置服务前,首先需要获取权限,并在每次使用前都检查权限,因为用户可以自己...
iOS 项目国际化 Localization
随着 Apple 对多语言用户使用体验的不断提升,从 iOS13 开始用户可以在应用设置中单独设置区别于系统的语言,同时对于开发者来说,对于多语言的适配体验也在不断的得到提升,本文将逐步说明如何对 iOS 项目做国际化支持。 添加支持的语言 支持国际化的第一步是添加我们想要支持的语言,选中 Project - Info ,在 Localizations 下面可以添加语言。 如果项目...