• 在 UIKit(AppKit)的世界中,通过框架提供的大量钩子(例如 viewDidLoad、viewWillLayoutSubviews 等),开发者可以将自己的意志注入视图控制器生命周期的各个节点之中,宛如神明。在 SwiftUI 中,系统收回了上述的权利,开发者基本丧失了对视图生命周期的掌控。不少 SwiftUI 开发者都碰到过视图生命周期的行为超出预期的状况(例如视图多次构造、onAppear 无从控制等)。

    本文将作者对 SwiftUI 视图、SwiftUI 视图生命周期的理解和研究做以介绍,供大家一起探讨。

    在进行更详尽说明之前,请大家先明确两个观点:

    • SwiftUI 没有同 UIkit...
  • Safe Area(安全区域)是指不与导航栏、标签栏、工具栏或其他视图控制器提供的视图重叠的内容空间。

    在 UIKit 中,开发者需要利用 safeAreaInsets 或 safeAreaLayoutGuide ,才能确保将视图放置在界面中的可见部分。

    SwiftUI 对上述过程进行了彻底的简化。除非开发者明确要求视图突破安全区域的限制,否则 SwfitUI 将尽力确保开发者创建的视图都被布局到安全区域当中。SwiftUI 同时提供了一些方法和工具让开发者对安全区域有所控制。

    本文将探讨如何在 SwiftUI 中获取 SafeAreaInsets、将视图绘制到安全区域之外、修改视图的安全区域等内容...

  • 对 NSMangedObject 进行深拷贝的含义是为一个 NSManagedObject(托管对象)创建一个可控的副本,副本中包含该托管对象所有关系层级中涉及的所有数据

    尽管 Core Data 是一个功能强大的对象图管理框架,但本身并没有直接提供托管对象的复制方法。如果开发者想创建某个托管对象的副本,唯一可行的途径就是编写一段特定的代码,将原始对象中属性的内容逐个读出并赋值给新对象。此种方式在托管对象结构简单时比较有效,一旦托管对象结构复杂、关系繁多,代码量将显著增大,且极易出错。

    多年来开发者一直在寻找一种便捷且通用的工具来解决深拷贝的问题,不过直到现在并没有一个被广泛认可的方案。

    我在开发...

  • iOS 系统自带的备忘录(Notes)在其质朴名称下提供了众多强大的功能,扫描文稿是我使用较多的功能之一。很早前便想在【健康笔记】之中提供类似的功能,但考虑到其涉及的知识点较多,迟迟没有下手。最近在空闲时,将近年 WWDC 中涉及该功能实现的专题梳理、学习了一遍,受益匪浅。苹果官方早已为我们准备了所需的一切工具。本文将介绍如何通过 VisionKit、Vision、NaturalLanguage、CoreSpotlight 等系统框架实现与备忘录扫描文稿类似的功能。

    用 VisionKit 拍摄适合识别的图片

    VisionKit 介绍

    VisionKit 是一个小框架,可以让你的应用程序使用系统的文...

  • Swift 5.5 提供了盼望已久的 async/await 的功能,为多线程开发带来了前所未有的便利。但 Core Data 由于其特有的并发规则,使用不慎容易导致代码陷入不可控状态,因此让不少开发者对在 Core Data 中进行多线程开发产生了望而却步的情绪。本文将对 Core Data 并发编程中几个常见的问题予以提示,以便开发者更好地了解 Core Data 的并发规则,充分享受 Core Data 提供的强大功能。

    启用 Core Data 并发调试参数

    开发者在 Core Data 中使用并发编程很容易碰到如下场景:程序在调试期间没有出现问题。程序上线后,由于使用者的增多,会出现无法...