beforeold blog

「梦未圆,心不老」

在 Live Activity 中展示图片的 3 种方式


苹果官方:iOS 16.1 的 Live Activity 介绍


【翻译】如何在 iOS 16 中获取系统文件夹的 URL

翻译自原文:Get URLs for system folders in iOS 16 在 iOS 16 中处理文件和文件夹变得容易多了。之前,为了获取一个应用文件夹下的某个文件的路径,不得不使用一些相当繁琐的 FileManager API。现在,可以直接从 URL 扩展的静态属性中获取到系统文件夹的路径了。 举个例子,为了获取应用沙盒中的 documents 文件夹,可以读取...

SwiftUI对ViewState的表达语法

背景 在 SwiftUI 中 View 可以理解为 State 的运算结果,View = f(State),在处理映射关系中,比:在一篇分析文章中定义了如下 ViewState 类型,并试图通过扩展的方式映射到 SwiftUI View。 typealias BuilderWidget<T> = (T) -> some View enum ViewState<T:...

Swift如何运用Never实现代码占位和API设计

1 什么是 Never Never 从字面意思理解就是“永不”。有以下应用场景 1.1 替代了早期 swift 版本中的特性 @nonreturn 例如,在一些方法暂时未来得及实现的情况下,可以使用 fatalError()函数 来实现临时占位: 这个函数的声明返回值就是 Never,该函数永远不会执行完后返回,会被编译器认为程序到此结束,因而可以临时代替函数的实现,其声明如下: func...

在Swift Codable中使用enum类型的风险

背景 枚举(enum)类型因其良好地表达对象不同的情况(case),是开发中的常用类型。 例如: enum OrderState: Int { case new = 1 case payed = 2 case done = 3 } 对于原始值为 Int 类型的 enum 类型,编译器可为其自动合成 Codable 实现。 extension OrderSta...

OC如何优雅地在performSelector指定未声明的selector

背景 由于 OC 的动态特性,可以通过 performSelector: 实现部分特殊情况下未声明 selector(一般是无法 import 其 API header 文件),比如: 调用私有 API 在低版本 SDK 编译环境下调用高版本 SDK 的 API 处于解耦的目的不便直接依赖导入(PS:常规情况,这样是不推荐的,可以通过不少解耦方案进行实现。) 由于 API ...

Swift如何解决《后台返回了一种让我讨厌的JSON》?

背景 浏览到一个关于 Swift Codable 应用的很有意思的案例(见后文参考文档),问题大意如下: 后端返回的字段与最初协议约定的类型不一致 期望:object 类型 实际: String 类型 这导致 Swift Model 声明该字段的不便利 不便利的原因在于: 1、如果属性声明为 String 类型,则使用时需要二次加工,从 stri...

如何解决 CocoaPods could not find compatible versions for pod RxSwift?

背景 在 pod install 时常遇到无法找到可用版本 pod 的问题,主要有以下情况 情况 1: 本地 pod repo 没有更新 如果使用了 pod install –fast-mode 命令,那么本地 spec repo 不会更新,这时的解决方案是更新 spec repo,可以直接尝试: 1、pod install --verbose 2、或者先执行 pod repo u...

如何写出容易理解的二叉树遍历

背景 二叉树的遍历是学习二叉树数据结构的基础,不过学完之后,如果理解不深,是特别容易忘记的,查看了很多种实现后,整理了一些相对较为容易的写法。 其中: DFS:深度优先遍历,包括前序遍历,中序遍历,后序遍历 BFS:深度优先遍历,包括层序遍历 实现 首先定义一个基础的二叉树结点。 public class TreeNode { public var val: Int publi...