首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Swift学习专栏
unravel2025
创建于2022-11-28
订阅专栏
记录本人在学习Swift过程中的精彩文章或者各种小妙招等等,内容来自 https://www.swiftwithvincent.com/、https://sarunw.com/posts/、 等博客
等 44 人订阅
共76篇文章
创建于2022-11-28
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Swift Package Command Plugin 实战:一键生成 Package 元数据
一、Command Plugin 与 Build Tool Plugin 区别速览 维度 Command Plugin Build Tool Plugin 触发方式 手动 swift package
Swift Package Plugin 深度实战:从原理到落地,自动生成字体枚举
一、什么是 Swift Package Plugin 诞生背景 Xcode 11 支持 Swift Package 分发源码 Xcode 14 把「插件」正式接入构建系统,允许在构建前/中/后执行自定
用 `defer` 管理异步清理:Swift 中的“保险丝”模式
异步状态清理的典型痛点 问题: 函数变大后,多处 return / throw 容易漏掉 isLoading = false Task 取消也会提前退出,清理代码同样不会执行 复制粘贴“收尾”逻辑 =
Swift Continuations 完全指南:一口气弄懂 4 种“桥梁”
一、为什么需要 Continuations? Swift 5.5 带来 async/await,但: 老 SDK / 三方库仍用回调 自己封装的 DispatchQueue、Timer、Notific
深入理解 SwiftUI 的 Structural Identity:为什么“换个条件分支”就会丢状态?
什么是 Structural Identity? SwiftUI 通过结构身份(Structural Identity)判断新旧视图树中的同一个节点: 类型相同 在层级中的位置相同 祖先链的身份相同
Swift 的 `withoutActuallyEscaping`:借一个 `@escaping` 身份,但不真的逃跑
一、为什么会有“假逃跑”需求? 默认情况下,函数参数的闭包是 non-escaping: 只能在函数体内同步调用 编译器可把闭包放在栈上,更快、无堆分配 但某些标准库 API(lazy.filter、
Opaque Types 完全指南:Swift 的“密封盒子”魔法
一、什么是 Opaque Type? 一句话:“函数返回一个具体类型,但调用者只能看到它遵守的协议。” 语法: some View 就是不透明返回类型(opaque return type)。 编译器
Thread.sleep vs Task.sleep:一句话记住“别再阻塞线程”
一、两句话区分 API 阻塞谁 后果 Thread.sleep(forTimeInterval:) 整条线程 线程池“饿死”,其他任务无法调度 Task.sleep(nanoseconds:) 当前任
强制 SwiftUI 重新渲染:`.id()` 这把“重启键”你用对了吗?
为什么需要“强制 reload”? SwiftUI 的声明式 DSL 依赖 状态 diff 自动更新视图,但以下场景需要“硬重启”: 网络请求失败后的“重试”按钮 图片/视频加载损坏,需重新解码 底层
Swift 6.2 新语法糖:在字符串插值里直接给 Optional 写默认值
一句话看懂新特性 旧写法(nil-coalescing) 新写法(Swift 6.2 插值默认值) 异类型痛点:旧语法搞不定 省去了手动 .map(String.init) ?? "Unknown"
窥探 `@Observable` 的“小黑盒”:private 属性到底会不会被观察?
问题抛出 直觉:private = 对外隐藏 = 不生成观察代码? 真相:除非加 @ObservationIgnored,否则一律观察,与可见性无关! 验证工具:SIL(Swift Intermedi
Swift 并发避坑指南:自己动手实现“原子”属性与集合
为什么需要“原子”操作? Swift 没有现成的 atomic 关键字。当多个线程/任务同时读写同一属性或集合时,会出现: 读到中间状态(数组越界、字典重复 key) 丢失更新(值类型复制-修改-写回
惊!只是 `import Foundation`,`String.contains("")` 的返回值居然变了?
两行代码,两种结果 是否 import Foundation "".contains("") "abc".contains("") ❌ 纯 Swift true true ✅ + Foundation
Swift 6.2 新武器:`weak let` —— 既弱引用又不可变的安全魔法
为什么需要 weak let? 需求场景 weak var的痛点 weak let的新能力 并发安全的 Sendable类型 weak var无法标记 Sendable ✅ 可以 不可重新赋值的弱引用
吃透 Swift 的 `@autoclosure`:把“表达式”变“闭包”的延迟利器
什么是 @autoclosure? 一句话:把“传入的表达式”自动包成“无参闭包”,实现延迟求值(lazy evaluation)。 语法糖级别:调用方完全无感,只需像传普通值一样写表达式;函数内部拿
@Observable 遇上属性包装器:一键绕过‘计算属性’禁令的 Swift 5.9 实战技巧
在 Swift 5.9 引入的 @Observable 宏(Observable framework)让“全部属性默认被观察”成为可能,但也带来了一个副作用: 下面给出原因剖析 + 最小修复示例 +
如何绕过“Extensions must not contain stored properties”错误
为什么 Swift 禁止扩展里存值? Swift 扩展(extension)不能增加存储属性,原因有三: 内存布局已确定 类/结构体的大小在编译期就固定,随意加字段会破坏 ABI。 类型安全 允许多个
彻底搞懂 Swift 的 Any、AnyObject、any
一张速查表先拎清 名称 具体类型 能容纳 典型场景 Swift 版本 Any 顶层类型(具体类型) 任意值(含函数、元组、struct、class) 与旧 API 交互、极少数极端动态场景 1.0+
OptionSet vs Enum:Swift 中如何优雅地表达“多选”?
两种“多选”方案的基因差异 维度 OptionSet Enum + Set 底层模型 位图(bitset) 哈希集合(HashSet) 存储大小 固定位宽(UInt8/Int/UInt64) 动态哈希
Swift 的 Optional.take():一次性消费值的神器
什么是 take()? take() 是 Swift6 标准库提供的 Optional 实例方法: “如果有值就返回它,同时把自己置为 nil;如果已经是 nil 就返回 nil。” 等价于“原子地消
下一页