Swift 类型擦除
在 《Swift
泛型协议》 中,我们探讨了如何基于类型擦除技术解决 Swift
泛型协议的存储问题,通过定义一个类型擦除包装器 AnyPrinter
解决了泛型协议 Printer
的存储问题。但是,AnyPrinter
并没有显式地引用
base
实例,因为当我们定义一个泛型类型的属性时,编译器会报错。
在 《Swift
泛型协议》 中,我们探讨了如何基于类型擦除技术解决 Swift
泛型协议的存储问题,通过定义一个类型擦除包装器 AnyPrinter
解决了泛型协议 Printer
的存储问题。但是,AnyPrinter
并没有显式地引用
base
实例,因为当我们定义一个泛型类型的属性时,编译器会报错。
之前在一些分享会上经常听到 类型擦除(Type Erase)这个概念,从其命名上大概知道它要干什么,但是对于为什么要用它?以及什么场景下使用它?对此,我并没有深刻的理解。于是,借着假期好好研究了一下。问题的一切要从泛型协议说起。
最近准备魔改一下 R.swift 以支持 Pod 库生成对应的
R.generated.swift
文件。经研究后发现,R.swift 的本质是使用
Swift Package Manager(简称 SPM) 开发了一个命令行工具
rswift
。很显然,要想魔改 R.swift,必须要学习如何使用 Swift
Package Manager
来开发命令行工具。本文,则通过一个简单的例子来对此进行介绍。
工作中经常会听到 “协程” 这个概念,第一次听到时,我就去查阅相关教材,发现根本就没有介绍“协程”的。于是上网查阅了相关的解释,当时大概理解了它是干什么的,但是深入的细节并不了解。为了搞明白协程,趁着假期我好好研究了一下协程,然后产出本文作为学习笔记进行总结,以用于后续进行回顾。
Xcode 10 中的 new build system 是使用 Swift 从零开始编写实现的,其在性能和可靠性方面有着显著的提升。
本文,我们将来探索一下 Xcode 构建的幕后原理,这一切都是从在我们点击了
Xcode 的 “build” 按钮(或按下了快捷键
Command + B
)之后开始的。
在软件开发中,静态库和动态库在各个方面为我们提供了便利。在计算机专业相关课程中,我们学习过静态库和动态库的一些理论,那么这些理论如何映射到 iOS 开发之中呢?iOS 中有很多相关概念和术语,对此,我并不是非常清晰。为了能够向编译优化的最终目标更近一步,我花了些时间进行了学习,并总结此文以供回顾复习。如果有什么写得不对的地方,欢迎指正。
在日常开发中,绝大多数软件都是基于一系列的库(Library)构建而成的,这些库包括平台所提供的库、软件自身的内建库以及第三方库。库的实现主要包括两部分:接口(interface,或称 API)和 实现(Implementation)。在 C 家族的语言中,一般都通过包含(include)头文件(header files)的方式来访问库的接口,如下所示。
一直以来,我对 Ruby 工具链环境都没有一个系统的认识,这使得我在 iOS 开发时遇到的 Ruby 环境问题都难以把握其本质原因。最近开始学习 Ruby 开发,借此机会深入学习了一下 Ruby 工具链,并整理出本文以供后续的学习。
本文收录了一些常用的 Linux 基本命令。
本文对 zsh 补全系统进行了简单的介绍,然后分析了一个完整的示例,该示例可以作为一个新的补全脚本的起点。剩余内容对示例补全脚本进行了简要的分析和介绍。
Mach-O 的全称是 Mach Object File Format,它可以用来表示可执行文件、目标代码或共享库、动态库等。Mach 内核的操作系统,如:macOS,iPadOS,iOS 采用的都是 Mach-O。本文我们来学习一下 Mach-O 的内部结构,通过学习 Mach-O,可以了解应用程序是如何加载到系统中的,如何执行的。
一直以来,响应式编程都是业界讨论的热门话题之一。为了推广响应式编程,ReactiveX 社区几乎为每一种编程语言设计实现了一种对应的响应式编程框架。RxSwift 就是针对 Swift 所开发的响应式框架。
了解函数式编程的同学可能或多或少都听说过 函子(Functor)、适用函子(Applicative)、单子(Monad)等概念,但是,能真正理解的人可能就比较少了。网上有很多相关的文章,甚至有一些书籍也开辟了章节进行了介绍,但是能解释清楚的,寥寥无几。最近,我出于阅读 RxSwift 源码,花时间研究了这几个概念。本文是我在理解函子、适用函子、单子等概念之后作出的总结。