SuperAPI AI 工具集

uikit-expert

编程与开发

查看项目

更新于 10-15 16:28

技能介绍

UIKit Expert Skill 是一个专注于 iOS UIKit 开发的技能,用于编写、审查或改进 UIKit 代码,遵循最佳实践。其核心理念是优先使用原生 API 和 Apple 官方文档指导。

用途

该技能适用于三类场景:审查现有 UIKit 代码、改进代码以使用现代 API、以及实现新的 UIKit 功能。它不强制特定架构模式(如 MVVM/VIPER/Coordinator),但建议将业务逻辑分离以便测试。原则是正确性优先,其次才是性能;对正确性使用“始终/绝不”的表述,对可选优化使用“建议/考虑”。

主要能力

技能覆盖以下核心领域:

  • 视图控制器生命周期:viewDidLoad 用于一次性设置(子视图、约束、代理),viewIsAppearing 用于几何相关工作和基于 trait 的布局,viewDidLayoutSubviews 仅用于轻量级图层帧调整。子视图控制器包含顺序为 addChild → addSubview → didMove(toParent:)。
  • Auto Layout:程序化视图必须设置 translatesAutoresizingMaskIntoConstraints = false;使用 NSLayoutConstraint.activate([]) 批量激活;约束创建一次后通过切换 isActive 或修改 constant 复用;不在运行时将优先级改为 .required;动画约束时更新 constant 后在动画块内对父视图调用 layoutIfNeeded()。
  • 集合视图与数据源:使用 UICollectionViewDiffableDataSource 配合稳定标识符;内容更新用 reconfigureItems,仅当 cell 类型变化时用 reloadItems;初始填充用 applySnapshotUsingReloadData;非平凡布局用 UICollectionViewCompositionalLayout;使用 UICollectionView.CellRegistration 避免字符串标识符和手动转换;使用 UIContentConfiguration 和 UIBackgroundConfiguration;使用 configurationUpdateHandler 处理状态驱动样式。
  • 导航:配置全部 4 个 UINavigationBarAppearance 槽位(standard、scrollEdge、compact、compactScrollEdge);在 viewDidLoad 中对 navigationItem 设置外观;深链接使用 setViewControllers(_:animated:);通过 transitionCoordinator 防止并发转场。
  • 动画:UIView.animate 用于简单一次性动画;UIViewPropertyAnimator 用于手势驱动、可中断动画;CABasicAnimation 用于仅图层属性;iOS 17+ 弹簧 API;约束动画流程为刷新布局 → 更新 constant → 对父视图动画 layoutIfNeeded()。
  • 内存管理:逃逸闭包默认使用 [weak self];Timer 使用基于块的 API 并在 viewWillDisappear 中 invalidate;CADisplayLink 使用弱代理模式;NotificationCenter 闭包中使用 [weak self] 并在 deinit 中移除观察者;代理始终为 weak;通过 deinit 验证释放。
  • 并发:UIViewController 是 @MainActor;存储 Task 引用并在 viewDidDisappear 中取消;await 后检查 Task.isCancelled;Task.detached 不继承 actor 隔离;不从后台调用 DispatchQueue.main.sync。
  • UIKit 与 SwiftUI 互操作:UIHostingController 需完整子视图控制器包含并保留为存储属性;sizingOptions = .intrinsicContentSize(iOS 16+);UIViewRepresentable 在 updateUIView 中设置可变状态;UIHostingConfiguration(iOS 16+)。
  • 图片加载:解码位图大小 = 宽 × 高 × 4 字节;使用 ImageIO 按显示尺寸降采样;iOS 15+ 使用 byPreparingThumbnail(of:) 或 prepareForDisplay();cell 复用时在 prepareForReuse 中取消 Task 并验证身份。
  • 键盘与滚动:使用 UIKeyboardLayoutGuide(iOS 15+);iPad 设置 followsUndockedKeyboard = true;替换所有手动键盘通知处理。
  • 自适应布局与无障碍:使用 registerForTraitChanges(iOS 17+)替代 traitCollectionDidChange;Dynamic Type 使用 UIFont.preferredFont(forTextStyle:) 和 adjustsFontForContentSizeCategory = true;深色模式使用语义颜色;VoiceOver 设置 accessibilityLabel、accessibilityTraits、accessibilityHint。

使用方式

技能提供三种工作模式:

  1. 审查:按审查清单逐项进行通过/失败判定。对任何失败项,按对应的核心指南修复。优先处理正确性关卡(生命周期、Auto Layout、内存、并发),性能项视为可选。
  2. 改进:对每个问题,应用“废弃 → 现代”对照表中的现代替代方案和对应的核心指南。性能工作(降采样、预取、约束抖动修复)作为可选优化呈现,而非强制要求。
  3. 实现新功能:按以下顺序构建,每步应用相关核心指南:设计数据流 → 生命周期 → Auto Layout → 集合视图 → 导航 → 动画、内存、并发 → 互操作、图片加载、键盘、Dynamic Type/VoiceOver/深色模式 → 用 #available 门控 iOS 26+ 特性并提供合理回退。

适用场景

适用于 iOS 平台使用 UIKit 框架进行界面开发的各类场景,包括新功能实现、代码审查、遗留代码现代化改造等。

限制

该技能不强制特定架构模式。性能优化项为可选建议而非强制要求。部分现代 API 需要特定 iOS 版本(如 iOS 13、14、15、16、17、18、26),需使用 #available 进行版本门控并提供回退。具体收费、价格、平台支持等商业信息暂未提供。