自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(145)
  • 收藏
  • 关注

原创 iOS Widget 开发-7:TimelineProvider 机制全解析:构建未来时间线

在 WidgetKit 中,TimelineProvider 是小组件生命周期的核心机制之一。它控制着 数据获取时机、展示内容 与 刷新策略,是实现时间驱动内容更新的基础。本文将介绍 TimelineProvider 的工作原理、设计模式、常见场景与高级用法,帮助大家构建智能、节能且灵活的 iOS 小组件。

2025-07-10 14:33:44 1612

原创 iOS Widget 开发-6:Widget 数据模型设计与 Entry 构建方式

在 WidgetKit 中,TimelineEntry 是信息展示的基本单位。一个 Widget 的刷新和 UI 展示,都以 Entry 为驱动。合理设计 Entry 与 Timeline,不仅提升用户体验,还能降低资源消耗,增强状态表达能力。

2025-07-10 07:33:26 384

原创 iOS Widget 开发-5:Widget 与主 App 的通信原理:App Group、UserDefaults 与文件共享

在 iOS 中,Widget 是独立于主 App 的 Extension,两者运行环境不同,无法直接调用彼此的内存空间。因此,若要实现数据共享与通信,必须借助系统提供的共享机制。

2025-07-09 08:36:39 810

原创 iOS Widget 开发-4:Widget 的生命周期与系统行为详解

Widget 在系统中运行的方式与主 App 大相径庭,它受系统严格托管,不支持常驻运行,也不具备实时更新能力。理解 Widget 的生命周期和系统行为,有助于我们设计出刷新频率合理、性能稳定、体验良好的组件。

2025-07-09 08:08:00 875

原创 iOS Widget 开发-3:Widget 的种类与尺寸(主屏、锁屏、灵动岛)

iOS 支持多种类型的 Widget,分布在主屏幕、锁屏、灵动岛等多个系统位置。每种 Widget 都有各自的尺寸、交互能力与限制。本篇将系统梳理 iOS 当前支持的 Widget 类型与尺寸规格,帮助开发者理解适配策略与设计方向。

2025-07-08 09:26:48 901

原创 iOS Widget 开发-2:创建你的第一个 Widget:项目结构与扩展搭建

iOS Widget 是通过 Widget Extension 实现的独立模块,它拥有自己的生命周期与渲染逻辑,与主 App 逻辑相对独立。

2025-07-08 08:14:49 1071

原创 iOS Widget 开发-1:什么是 iOS Widget?开发前的基本认知

随着 iOS 系统的不断演进,Widget(小组件)已经成为提升用户体验的重要组成部分。从 iOS 14 开始,Apple 引入了全新的 WidgetKit 框架,允许开发者使用 SwiftUI 创建高度可定制、灵活展示的 Widget,并可添加到主屏幕、锁屏界面甚至待机模式中。

2025-07-07 13:57:31 1197

原创 Swift Package 教程:创建、发布与使用详解

Swift Package 是 Apple 推出的官方依赖管理工具,基于 Swift Package Manager(SPM)。它让我们可以轻松地组织代码模块,复用组件,同时也是开源库分享和集成的标准方式。本教程将介绍 Swift Package 的概念、创建、结构、使用与发布等内容,帮助大家掌握 Swift Package 的使用。

2025-07-06 14:37:21 810

原创 Swift 协议详解:Equatable、Hashable、Identifiable、Comparable

Swift 是一个强类型的语言,它通过协议(Protocol)为类型提供功能扩展的强大能力。本篇文章将深入解析四个在开发中非常常见也非常重要的协议:Equatable、Hashable、Identifiable 和 Comparable。掌握它们不仅可以写出更简洁、更强大的代码,也能够更好地与 Swift 标准库(如数组、集合、字典等)进行交互。

2025-07-06 14:34:55 612

原创 在 iOS 和 tvOS 上实现 Sign in with Apple 登录功能

Apple 提供的 Sign in with Apple(Apple 登录)是一个既安全又注重隐私的身份验证方式,支持用户通过 Apple ID 登录您的 App。在 iOS 和 tvOS 上,虽然使用场景不同,但底层接口基本一致。本文将详细介绍其 API、状态处理、回调方法,并提供代码示例,帮助大家快速集成。

2025-07-02 07:09:48 1150

原创 SwiftUI 中的模糊效果详解:.blur、.material、UIVisualEffectView

模糊效果(Blur Effect)是 iOS 用户界面设计的重要组成部分,它被广泛应用于系统控制中心、通知背景、弹窗蒙版等场景,营造出“毛玻璃”的视觉层次感。 本文将深入解析 SwiftUI 中实现模糊效果的三种主流方式:`.blur(radius:)`、`.background(Material)`、以及封装 UIKit 的 `UIVisualEffectView`,并详细说明每种方式的适用场景、性能表现及实现方式。

2025-07-01 07:20:44 1272

原创 Xcode 中常用图片格式详解

在 iOS/macOS 开发过程中,合理选择图片格式对应用的性能、体积、显示效果影响显著。Xcode 中支持多种图像格式,包括位图(如 PNG、JPEG)、矢量图(如 PDF、SVG)以及动画格式(如 GIF、WebP)。本文将详细介绍这些常用图片格式的特点、优缺点及适用场景,帮助开发者在项目中做出更合理的资源选择。

2025-07-01 06:58:31 540

原创 Swift 中 Result 类型全解析:从基础到进阶

Result特性Result返回结构无返回值显式 success/failure链式调用不方便支持 map / flatMap多阶段处理需嵌套可组合可读性中高可测试性异常难模拟易构造成功/失败场景Swift 的Result是将函数式编程与错误处理融合的优秀设计。它不仅简化了异常流程,还增强了组合能力。我们应在业务逻辑、网络请求、异步流程、状态传递中更多地使用Result,写出更简洁、更安全的代码。让我们从现在开始,用Result统一错误处理思路,让代码更具表达力!

2025-06-30 07:43:51 827

原创 Swift concurrency 10 — AsyncStream 和 AsyncThrowingStream:用异步流优雅处理事件

Swift Concurrency 带来了现代化的异步编程体验。在处理异步事件流时,AsyncStream 和 AsyncThrowingStream 提供了优雅的方式来消费和控制异步值序列。本文将全面讲解这两个 API 的用途、用法、底层机制和实战场景。

2025-06-30 06:41:30 950

原创 AppsFlyer SDK 介绍:移动归因、事件追踪与广告效果分析

随着移动应用市场竞争日益激烈,精准的用户归因与广告投放分析变得尤为重要。AppsFlyer 是业内领先的移动归因与营销分析平台,广泛应用于广告优化、渠道评估、用户行为分析等场景。

2025-06-24 08:40:50 1266

原创 SwiftUI 的 `PhotosPicker` 构建图片选择器(含多选)

SwiftUI 在 iOS 16+ 引入了 PhotosPicker,让我们能以声明式方式使用系统原生的照片选择器。结合 Swift Concurrency,这为异步加载图片提供了极大的便利。

2025-06-24 08:24:01 879

原创 SwiftUI 中的 .searchable() 修饰符详解:打造强大搜索体验

随着 SwiftUI 的不断演进,Apple 在 iOS 15 中引入了 .searchable() 修饰符,为开发者提供了声明式的方式,在列表、导航视图等组件中添加搜索功能。本文将深入讲解 .searchable() 的用法、进阶特性。

2025-06-20 09:32:47 693

原创 SwiftUI 的 refreshable 修饰符:优雅实现下拉刷新

在 iOS 应用中,“下拉刷新”是一种常见的交互模式。而在 SwiftUI 中,从 iOS 15 开始,Apple 提供了一个原生支持的修饰符 —— refreshable。

2025-06-20 09:06:20 429

原创 Swift concurrency 9 — Sendable 协议:跨任务共享数据的安全保障

随着 Swift 并发(Swift Concurrency)的引入,开发者终于有了一种类型安全的方式来编写并发代码,而不必再依赖传统的锁与队列模型。在这个系统中,有一个非常关键的协议:Sendable。

2025-06-13 09:33:44 1336

原创 Swift concurrency 8 — Actor的理解与使用

Swift 从 5.5 开始引入了基于协程的并发模型(Concurrency Model),为我们带来了 async/await、Task 以及 `actor` 等新特性。其中,`actor` 是专门为解决**数据竞争(data race)问题**而设计的结构化并发组件。在传统的多线程编程中,开发者常常需要依赖锁(如 `DispatchQueue`, `NSLock` 等)来手动同步数据访问,这既容易出错,又难以维护。`actor` 的出现,大大简化了并发编程的复杂性。

2025-06-13 08:15:07 1212

原创 Xcode 16.4+iOS 18.5 模拟器因缺失 libswiftWebKit.dylib 闪退问题解决方案

随着 Xcode 16.4 的发布,在使用模拟器(特别是iOS 18.5 模拟器)运行包含 WebKit 功能的 iOS 应用时,遇到了如下严重的运行时崩溃

2025-06-05 08:13:19 1692

原创 Xcode 16.4 + iOS 18 系统运行时崩溃:___cxa_current_primary_exception 符号丢失的原因与解决方案

这是一个典型的 运行时动态链接失败(dyld) 错误,表面上是找不到 ___cxa_current_primary_exception 符号,实质上是 Swift 6.1 / Xcode 16.4 使用的 C++ ABI 运行时 与老版本 iOS 不兼容。

2025-06-05 07:36:27 1341

原创 深入 UICollectionView:scrollToItem(animated: false) 的隐藏陷阱

你以为 animated: false 只是省掉动画?其实它悄悄毁了 cell 复用机制,内存瞬间爆炸……

2025-06-04 07:49:53 620

原创 SwiftUI中竖向排版文字探索及封装(支持中文及英文)

在移动开发中,有时会遇到需要垂直排版文字的场景,特别是在一些中文设计中,竖排文本可以营造出一种独特的视觉效果。这篇文章将详细讲解如何实现一个支持竖排中文和英文的 SwiftUI 组件,并提供详细的代码实现和思路。

2024-10-24 13:00:00 1107

原创 Swift concurrency 7 — Continuation的理解与使用(withCheckedContinuation、withCheckedThrowingContinuation)

在Swift中,continuation 是在异步代码中将基于回调的异步函数转换为使用现代 Swift 的 async/await 语法的一种机制。这种机制主要通过 withCheckedContinuation 和 withCheckedThrowingContinuation 函数来实现。这两个函数可以帮助我们将传统的基于回调的异步 API 适配到 Swift 的 async/await 机制中。

2024-10-24 08:30:00 1203

原创 Swift concurrency 6 — TaskGroup的理解与使用

在SwiftUI中,TaskGroup 是一种处理并发任务的工具,特别适用于需要并发执行多个独立任务并在它们都完成后进行进一步处理的场景。TaskGroup 提供了一种结构化并发的方法,使得并行任务的启动、管理和结果收集变得更加简便和安全。

2024-08-31 19:24:54 1386 1

原创 Swift concurrency 5 — async let的理解与使用

通过async let我们可以让一组异步方法同时去执行,并且当所有异步方法都返回结果后,程序再继续往下走。

2024-08-29 13:45:50 1175

原创 Swift concurrency 4 — Task和.task的理解与使用

Swift中的Task是一种异步操作,它提供了一种替代DispatchQueue.main.async{}等传统方法的方法。通过使用Task,我们可以简化代码并更好地控制异步操作。此外,Task还提供了其他选项,可以进一步增强任务执行。

2024-08-29 08:48:16 1626

原创 Swift concurrency 3 — 三种异步方式(@escaping closure, Combine, async/await)

本篇文章主要回顾了一下三种异步请求方式,@escaping closure, Combine, async/await这三种方式,并做了一些代码示例,无论采用哪种方法,都是因人而异,因项目而异,不过还是希望大家跟上最新的步伐,让自己的代码更高效,更稳健,更易维护。

2024-08-28 12:22:51 1235 1

原创 Swift concurrency 2 — async await的理解与使用

async/await的组合能够帮助发开着写出更容易理解,更加健壮并且易维护的异步编程代码,它的出现将会替代以前的异步编程逻辑,对开发者更加友好。async和await是组合使用的,调用被async修饰的方法的时候,需要在异步上下文中执行,并且在调用方法的前面加上await关键字。如果需要提供一个上下文的环境,我们可以采用Task,其闭包内提供了一个异步环境。另外不管怎么调用,最终都要回归到UI上,切记要调用主线程代码。

2024-08-28 09:25:58 1317

原创 Swift concurrency 1 — Do Try Catch Throws理解与使用

在 Swift 中,采用do-catch语句可以有效地处理可能出现的异常错误,提高应用的稳定性和用户体验。在适当的地方捕获和处理错误,是异常处理的关键步骤。在实际应用开发中,处理网络请求、数据解析等操作时,通常会用到异常处理机制。通过合理的异常处理,可以使应用更稳定,更易于维护。

2024-08-02 13:15:00 744 1

原创 Swift中@escaping的理解与使用

@escaping关键字修饰的闭包,意味着该闭包将在超出或离开你传递给它的作用域后仍然存在。也就是说这个闭包超出了方法的作用域,方法都return结束了,闭包还活着。而没有被@escaping关键字修饰的闭包在方法结束的时候,也结束了自己。

2024-08-02 09:00:34 1157

原创 Swift Combine — Publisher和Subscriber的交互流程(自定义Publisher、Subscriber、Subscription)

本篇文章将详细介绍一下Combine中Publisher和Subscriber的交互流程,以及如何自定义Publisher、Subscriber、Subscription,通过自定义我们可以更好的理解一个完整的订阅流程。

2024-06-25 12:27:20 1310 1

原创 Swift Combine — Scheduler(subscribe(on:)和receive(on:)的使用)

在 Swift 的 Combine 框架中,Scheduler 是一个重要的概念,用于控制任务的调度和执行。本文将详细介绍 Scheduler 的作用、常见的 Scheduler 类型以及如何使用 Scheduler 来管理任务的执行。

2024-06-25 07:54:23 1415

原创 Swift Combine — Debounce和Throttle的理解与使用

理解Combine中debounce和throttle的区别对于有效的事件处理和数据流控制至关重要。Debounce 操作符用于限制数据流的频率,只有在指定的时间间隔内没有新数据到达时,才会将最后一个数据发送出去。Throttle 操作符用于控制数据流的速率,只有在指定的时间间隔内才会发送数据,忽略掉间隔内的其他数据。

2024-06-24 11:13:36 1745

原创 Swift Combine — AnyCancellable的理解与使用

在Swift的Combine框架中,AnyCancellable是一个非常重要的类型,用于持有和管理订阅关系。它可以持有任何类型的Cancellable对象,并提供了一种类型擦除的方式来管理订阅关系。

2024-06-24 07:56:15 901

原创 Swift Combine — Notification、URLSession、Timer等Publisher的理解与使用

在Swift的Combine框架中,可以使用NotificationCenter.Publisher来创建一个能够订阅和接收通知的Publisher。同时URLSession.DataTaskPublisher也提供了一种方便的方式来执行网络请求并处理返回的数据。

2024-06-21 13:16:27 1674

原创 Swift Combine — zip和combineLatest的理解与使用

Publisher 上还有一些其他的操作,比如 zip 和 combineLatest,能让我们在时序上对控制多个 Publisher 的结果进行类似 and 和 or 的合并,它们在构建复杂 Publisher 逻辑时也十分有用。

2024-06-21 10:48:14 1493

原创 Swift Combine — Operators(常用Filtering类操作符介绍)

本文主要介绍了Combine中的一些过滤类的操作符,比如filter,tryFilter, compactMap, tryCompactMap, removeDuplicates等等。

2024-06-20 21:50:26 760

原创 Swift Combine — eraseToAnyPublisher的理解与使用(AnyPublisher)

使用eraseToAnyPublisher()将AnyPublisher的实例公开给下游订阅者,而不是该发布者的实际类型。这种形式的类型擦除保留了跨API边界的抽象,比如不同的模块。当你将发布者公开为AnyPublisher类型时,你可以随时更改底层实现,而不会影响现有客户端。

2024-06-20 08:15:42 991

SwiftUI之判断ScrollView是否滑动到底部及ChildSizeReader的使用文章示例代码

SwiftUI之判断ScrollView是否滑动到底部及ChildSizeReader的使用文章中所使用的示例代码。

2023-09-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除