iOS 开发者的 AI 编程入门完全指南:从概念到实战

iOS 开发者的 AI 编程入门完全指南:从概念到实战

2026 年,AI 编程已经从"尝鲜玩具"变成了"生产力工具"。GitHub Copilot、Cursor、Claude Code……这些名字你可能在技术群里听过无数次,但始终没搞清楚它们到底是什么、怎么用、能帮你解决什么问题。

这篇文章就是为你准备的。假设你是一个有多年 iOS 开发经验、但从未系统接触过 AI 编程的开发者,我会从最基础的概念讲起,把所有相关理论讲透彻,最后带你完成一系列面向 iOS 开发场景的实操。读完这篇文章,你将能够:

  • 理解 AI 编程的底层原理,不再被各种新概念绕晕

  • 根据自己的需求选择合适的 AI 编程工具

  • 掌握 Prompt Engineering 的核心技巧

  • 在日常 iOS 开发中熟练使用 AI 提升效率


认知篇:AI 编程到底是什么

从"写代码"到"描述需求":一次范式转变

在传统编程中,你的工作流程是这样的:

  1. 理解需求

  2. 设计架构

  3. 用 Swift / Objective-C 逐行编写代码

  4. 编译、调试、修复 Bug

  5. 反复迭代直到功能完成

而在 AI 编程的范式下,你的角色从"代码的书写者"变成了"意图的描述者"和"结果的审查者"。你不再需要逐行敲出每一个字符,而是用自然语言告诉 AI 你想要什么,然后审查它生成的代码是否正确、是否符合项目规范。

核心转变:AI 编程不是让 AI 取代程序员,而是让程序员从"体力活"(重复编码、样板代码)中解放出来,把更多精力放在"脑力活"(架构设计、业务逻辑、代码质量)上。

打个比方:传统编程像你自己亲手砌墙,每一块砖都要自己搬;AI 编程像你有了一个熟练的施工队,你只需要告诉他们"这里要砌一面 3 米高的墙,用红砖,留一个窗户",他们就会帮你完成。但你仍然需要是那个懂建筑的工程师——你要检查墙砌得直不直、承重够不够、有没有偷工减料。

大语言模型(LLM)基础:它是怎么"懂"代码的

要理解 AI 编程,首先要理解它的底层引擎——大语言模型(Large Language Model,简称 LLM)。

什么是大语言模型

大语言模型本质上是一个经过海量文本训练的"概率预测机器"。它的核心能力只有一个:根据前面的文字,预测下一个最可能出现的文字

听起来很简单对不对?但当这个模型足够大(参数达到数十亿甚至数千亿)、训练数据足够多(覆盖互联网上的大部分文本,包括代码仓库、技术文档、书籍等)时,它就会"涌现"出令人惊叹的能力——它能写文章、翻译、推理、写代码,甚至通过程序员面试。

为什么 LLM 能写代码

代码本质上也是一种"语言"——它有语法规则、有结构、有惯用模式。当 LLM 在训练过程中"阅读"了 GitHub 上数十亿行代码后,它就学会了:

  • 各种编程语言的语法规则(Swift、Python、JavaScript……)

  • 常见的编程模式和设计模式(MVC、MVVM、Delegate、Closure……)

  • 主流框架和库的 API 用法(UIKit、SwiftUI、Combine、Alamofire……)

  • 代码的命名规范和项目结构

  • 常见 Bug 的模式和修复方法

所以当你输入"用 SwiftUI 写一个登录页面"时,LLM 并不是在"思考"怎么写,而是在根据它学到的统计规律,一个 token 一个 token 地预测出最可能的代码序列。

重要认知:LLM 不"理解"代码,它只是在预测。这意味着它可能会生成看起来很合理但实际上有 Bug 的代码(俗称"幻觉")。这也是为什么你必须审查 AI 生成的每一行代码。

主流大语言模型一览

模型系列 开发商 代表型号 特点 代码能力
GPT OpenAI GPT-4o / o1 / o3 综合能力最强,生态最成熟 顶尖
Claude Anthropic Claude 3.5 Sonnet / Opus 长上下文优秀,代码质量高,安全对齐好 顶尖
Gemini Google Gemini 2.0 / 2.5 Pro 多模态强,与 Google 生态集成好 优秀
DeepSeek 深度求索 DeepSeek V3 / R1 国产之光,性价比极高,推理能力强 优秀
豆包 字节跳动 豆包 1.5 Pro 国产,中文理解好,免费额度多 良好
通义千问 阿里巴巴 Qwen 2.5 / 3 开源模型生态丰富,可本地部署 良好

AI 编程的能力边界:它能做什么,不能做什么

在投入学习之前,建立正确的预期非常重要。AI 编程不是万能的,了解它的能力边界能帮你把它用在刀刃上。

AI 擅长的事

  • 生成样板代码:UITableView 的 dataSource/delegate、网络请求封装、模型定义等重复度高的代码

  • 代码补全:写到一半的函数、属性声明、import 语句等

  • 代码解释:帮你读懂一段复杂的遗留代码或第三方库源码

  • 代码重构:把 Objective-C 代码转成 Swift、把 MVC 拆成 MVVM、提取公共方法等

  • Bug 排查:根据崩溃日志和代码定位问题原因

  • 写测试:为已有函数生成单元测试用例

  • 文档生成:为代码添加注释、生成 README、编写接口文档

  • 技术调研:对比多个方案的优劣、解释某个技术概念

AI 不擅长的事

  • 复杂的架构设计:涉及多个模块协作、长期可维护性的架构决策,AI 容易给出"看起来合理但实际有坑"的方案

  • 深度业务逻辑:需要理解公司内部业务规则、历史包袱的逻辑,AI 缺乏上下文

  • 精确的性能优化:需要实际 profiling 数据支撑的优化,AI 容易凭"经验"瞎猜

  • 最新的 API 和框架:如果某个框架是最近几个月才发布的,AI 的训练数据里可能没有

  • 安全敏感的代码:加密、鉴权、支付等代码,AI 生成的可能存在安全漏洞

  • 跨文件的全局重构:涉及大量文件联动的修改,AI 容易遗漏或产生不一致

最佳实践:把 AI 当成一个"能力很强但不了解你项目的初级工程师"。它能快速完成明确的小任务,但需要你给出清晰的指令、提供足够的上下文、并严格审查它的输出。


工具篇:当下主流 AI 编程工具全景

理解了原理之后,我们来看看实际可用的工具。目前 AI 编程工具可以分为三大类,每类有不同的定位和使用场景。

工具分类:三类工具各有所长

类别 核心能力 代表工具 适合场景
代码补全类 在编辑器中实时补全代码,像"更聪明的自动补全" GitHub Copilot、Codeium、Tabnine、Fitten Code 日常编码,提升写代码速度
对话编程类(AI IDE) 内置 AI 助手的代码编辑器,支持对话、多文件编辑、项目级理解 Cursor、Windsurf、Trae、Claude Code、Gemini CLI
通用大模型 网页端或 App 端的对话式 AI,不直接连接代码仓库 ChatGPT、Claude、Gemini、豆包、Kimi、DeepSeek 技术调研、代码解释、学习新概念

代码补全类:你的"超级自动补全"

GitHub Copilot

GitHub Copilot 是这个品类的开创者,由 GitHub 和 OpenAI 联合开发。它直接集成在 Xcode、VS Code、JetBrains 等主流 IDE 中,当你写代码时,它会以灰色提示的方式给出补全建议,按 Tab 键即可接受。

核心特点

  • 支持几乎所有主流编程语言和框架

  • 能根据注释生成代码(写一句"// 检查手机号格式",它就能生成对应的正则校验函数)

  • 支持整行、整块代码补全

  • Copilot Chat 支持对话式提问和代码解释

价格:个人版约 $10/月,学生可免费申请,企业版有额外管理功能。

其他补全工具

  • Codeium(现 Windsurf):免费额度大,支持多 IDE,后转型为 AI IDE Windsurf

  • Tabnine:支持本地部署,适合对代码隐私有要求的企业

  • Fitten Code(非十科技):国产工具,免费,对中文注释和国内技术栈支持好

  • CodeGeeX(智谱):国产,免费,支持多语言

对话编程类(AI IDE):当下最火的生产力工具

如果说代码补全类工具是"更聪明的自动补全",那 AI IDE 就是"坐在你旁边的 AI 结对编程伙伴"。它不仅能补全代码,还能理解你的整个项目、跨文件修改、执行命令、甚至自己调试。

Cursor

Cursor 是目前最受欢迎的 AI IDE,基于 VS Code fork 而来,因此你熟悉的 VS Code 插件、快捷键、主题在 Cursor 中几乎都能用。

核心功能

  • Cmd+K(Inline Edit):选中代码后按 Cmd+K,输入指令即可直接修改选中的代码

  • Cmd+L(Chat):打开侧边对话窗口,可以问问题、让它改代码

  • Composer / Agent 模式:让 AI 自主完成复杂任务,它会自动读取相关文件、编写代码、运行命令、修复错误

  • @ 引用:在对话中用 @ 引用文件、文件夹、代码片段、甚至网页,给 AI 提供精准上下文

  • .cursorrules:在项目根目录放置规则文件,让 AI 始终遵循你的项目规范

价格:免费版有额度限制,Pro 版 $20/月,Business 版 $40/月。

Windsurf

Windsurf(原 Codeium)是 Cursor 的主要竞争对手,同样基于 VS Code。它的特色是 Cascade 功能——一个更强大的 Agent 模式,能更好地处理多步骤、跨文件的复杂任务。

与 Cursor 相比,Windsurf 的免费额度更慷慨,对长上下文的处理也有自己的优化。

Trae

Trae 是字节跳动推出的 AI IDE,国产工具的代表。它的优势在于:

  • 对中文项目和中文需求的理解更好

  • 集成了豆包大模型,国内访问速度快

  • 免费额度充足

  • 内置了 AI 生成 UI 预览等特色功能

Claude Code / Gemini CLI

这是另一类形态——终端中的 AI 编程助手。它们不是完整的 IDE,而是在命令行中运行的工具,你可以在任何编辑器旁边使用它们。

  • Claude Code:Anthropic 官方推出的 CLI 工具,基于 Claude 模型,擅长处理大型代码库和复杂重构

  • Gemini CLI:Google 推出的 CLI 工具,基于 Gemini 模型

  • Aider:开源的 AI 编程 CLI,支持多种模型,可与 Git 深度集成

这类工具的优势是轻量、不绑定特定编辑器、可以和你现有的开发流程无缝配合。缺点是没有图形界面,学习曲线稍陡。

通用大模型:你的"技术顾问"

通用大模型不直接连接你的代码仓库,但它们在技术调研、概念解释、代码片段生成方面非常有用。你可以把它们当成一个"随叫随到的技术顾问"。

典型使用场景

  • "解释一下 Swift 的 actor 和 @MainActor 有什么区别"

  • "SwiftUI 中 GeometryReader 和 PreferenceKey 各自适合什么场景"

  • "帮我写一个用 Combine 处理网络请求的示例"

  • "对比一下 Kingfisher 和 SDWebImage 的优劣"

  • "这个 Crash 日志是什么意思:EXC_BAD_ACCESS KERN_INVALID_ADDRESS"

推荐组合

  • 日常使用:豆包 / Kimi(免费、中文好、速度快)

  • 复杂技术问题:Claude / GPT-4o(代码理解和推理能力更强)

  • 需要最新信息:Gemini(联网搜索能力强)

iOS 开发者的工具选择建议

iOS 开发的特殊性:由于 Xcode 是 iOS 开发的核心 IDE,而大多数 AI IDE(Cursor、Windsurf 等)都是基于 VS Code 的,不能直接用来编译和运行 iOS 应用。因此 iOS 开发者通常需要"双 IDE 协作"的工作流。

推荐的工具组合

  1. 入门级(免费):Xcode + Fitten Code/CodeGeeX(补全)+ 豆包/Kimi(对话)

    • 成本最低,能体验 AI 编程的核心价值
  2. 进阶级(推荐):Xcode + Cursor(AI IDE)+ GitHub Copilot(补全)+ Claude/GPT(顾问)

    • 在 Xcode 中编译运行,在 Cursor 中写代码和重构,两者通过文件系统同步

    • 这是目前大多数 iOS AI 编程实践者的工作流

  3. 专业级:Xcode + Cursor + Claude Code + 自定义 Prompt 模板 + .cursorrules

    • 深度定制,最大化 AI 编程效率

双 IDE 协作工作流

  1. 在 Xcode 中打开项目,负责编译、运行、调试、Interface Builder 操作

  2. 在 Cursor 中打开同一个项目文件夹,负责代码编写、重构、AI 辅助

  3. 在 Cursor 中修改代码后保存,切回 Xcode 会自动检测到文件变化并重新加载

  4. 编译报错时,把错误信息复制到 Cursor 的 AI 对话中,让 AI 帮你分析和修复


理论篇:AI 编程的核心概念

工欲善其事,必先利其器。但比工具更重要的是理解背后的核心概念。这些概念能帮你在使用任何 AI 工具时都能做到"知其然更知其所以然"。

Token 与上下文窗口:AI 的"记忆"和"注意力"

什么是 Token

Token 是 LLM 处理文本的基本单位。你可以把它理解为"AI 眼中的词"——但它不是严格意义上的单词,而是文本的子词(subword)片段。

大致换算关系:

  • 英文:1 个 token ≈ 0.75 个单词,100 个 token ≈ 75 个单词

  • 中文:1 个 token ≈ 1~2 个汉字(因为中文字符更复杂,通常一个汉字就是一个 token)

  • 代码:1 个 token ≈ 几行代码的一部分(取决于代码的复杂度和重复度)

为什么要关心 Token?因为:

  1. 计费单位:大多数 API 按 token 数量收费,输入和输出分别计费

  2. 上下文限制:每个模型都有最大 token 限制,超过就无法处理

  3. 生成速度:token 越多,生成时间越长

什么是上下文窗口(Context Window)

上下文窗口是 LLM 在一次对话中能"看到"的最大 token 数量。你可以把它想象成 AI 的"工作记忆"——它只能记住窗口内的内容,窗口外的内容它就"忘了"。

目前主流模型的上下文窗口:

  • GPT-4o:128K(约 9.6 万英文词 / 约 10 万汉字)

  • Claude 3.5 Sonnet:200K(约 15 万英文词 / 约 15 万汉字)

  • Claude 3 Opus:200K

  • Gemini 1.5 Pro:1M~2M(百万级,约 75 万~150 万英文词)

  • DeepSeek V3:128K

重要提醒:上下文窗口大不等于效果一定好。当上下文非常长时,模型可能会出现"中间遗忘"(Lost in the Middle)现象——对放在上下文中间的内容关注度降低。因此,即使模型支持 200K 上下文,也不建议无脑塞满,精准的上下文比冗长的上下文更有效。

对 iOS 开发者的实际意义

一个中等规模的 iOS 项目可能有几十万行代码,远远超过任何模型的上下文窗口。这意味着:

  • AI 不可能一次性"读完"你的整个项目

  • 你需要主动给 AI 提供相关的代码片段(这就是 Cursor 的 @ 引用功能的价值)

  • 对于跨多个文件的复杂任务,需要拆分成多个小任务逐步完成

  • .cursorrules 等项目级配置文件能在有限的上下文中提供关键的项目规范信息

Temperature:控制 AI 的"创造力"

Temperature(温度)是 LLM 的一个核心参数,控制输出的随机性和创造性。

  • Temperature = 0:输出最确定、最保守。每次输入相同的内容,输出几乎完全一样。适合需要精确答案的场景,如代码生成、事实性问答。

  • Temperature = 0.7:默认值,平衡创造性和确定性。适合大多数日常场景。

  • Temperature = 1.0+:输出更随机、更有创造性,但也更容易出错和"幻觉"。适合创意写作、头脑风暴。

对编程场景的建议

  • 生成代码时,使用较低的 Temperature(0~0.3),减少幻觉和不确定的 API 调用

  • 技术方案讨论、头脑风暴时,可以适当提高 Temperature(0.5~0.7)

  • 大多数 AI 编程工具已经帮你预设了合适的 Temperature,不需要手动调整

Prompt Engineering:跟 AI 对话的艺术

Prompt(提示词)就是你给 AI 的输入指令。Prompt Engineering 就是研究如何写好指令,让 AI 给出更好的输出。这是 AI 编程时代最重要的技能之一。

好 Prompt 的四个要素

一个高质量的 Prompt 通常包含以下四个要素(可以记为 CRISPE 或类似框架,但核心就这几点):

  1. 角色(Role):告诉 AI 它应该扮演什么角色。"你是一个有 10 年经验的 iOS 高级开发工程师"比"帮我写代码"效果好得多。

  2. 任务(Task):清晰描述你要它做什么。越具体越好。

  3. 上下文(Context):提供相关的背景信息、代码片段、项目规范等。

  4. 要求(Constraints / Format):明确输出格式、限制条件、质量标准。

反面教材 vs 正面教材

差的 Prompt

帮我写一个登录页面

好的 Prompt

你是一个有 5 年经验的 iOS 开发工程师,精通 SwiftUI 和 Combine。

请帮我用 SwiftUI 写一个登录页面,要求:
1. 包含手机号输入框(11位数字限制)、验证码输入框(6位数字)、获取验证码按钮、登录按钮
2. 使用 MVVM 架构,ViewModel 用 @Published 暴露状态
3. 手机号格式校验用正则,验证码倒计时 60 秒
4. 登录按钮在手机号和验证码都填写后才可点击
5. 适配深色模式,使用系统默认配色
6. 代码要有清晰的注释

请只输出 Swift 代码,不要额外解释。

看出区别了吗?好的 Prompt 给了 AI 明确的角色、具体的需求清单、技术栈要求、输出格式约束。AI 不需要"猜"你想要什么,输出质量自然更高。

Prompt Engineering 的核心技巧

  1. 提供示例(Few-shot):给 AI 看 1~3 个输入输出的例子,它就能快速理解你想要的格式和风格。

    请按照以下格式为函数添加注释:
    
    示例:
    func calculateTotal(price: Double, quantity: Int) -> Double {
        /// 计算商品总价
        /// - Parameters:
        ///   - price: 商品单价
        ///   - quantity: 商品数量
        /// - Returns: 总价 = 单价 × 数量
        return price * Double(quantity)
    }
    
    请为以下函数添加同样风格的注释:
    func fetchUserInfo(userId: String, completion: @escaping (Result<User, Error>) -> Void)
    
  2. 分步思考(Chain-of-Thought):对于复杂问题,让 AI"先思考再回答",可以显著提升推理能力。在 Prompt 中加入"请先分析问题,列出步骤,再给出最终答案"。

  3. 指定输出格式:明确告诉 AI 输出什么格式(纯代码 / Markdown / JSON / 表格),避免它输出一堆你不需要的解释。

  4. 迭代优化:不要指望一次 Prompt 就得到完美结果。先让 AI 生成初版,然后针对不满意的地方提出修改意见,逐步迭代。

  5. 用分隔符区分指令和内容:当你需要把代码片段传给 AI 时,用 ``` 或 --- 等分隔符把代码和指令分开,避免 AI 把你的代码当成指令。

RAG:让 AI 用上"外部知识"

RAG(Retrieval-Augmented Generation,检索增强生成)是目前 AI 应用中最重要的技术之一。简单来说,它解决的是 LLM 的两个固有问题:

  1. LLM 的知识有截止日期,不知道最新的信息

  2. LLM 不知道你公司/项目的私有信息

RAG 的工作原理

  1. 把外部知识(文档、代码库、Wiki 等)切分成小块,转换成向量(embedding)存储起来

  2. 当用户提问时,先把问题也转换成向量,在知识库中检索最相关的几个片段

  3. 把检索到的片段和用户问题一起拼接到 Prompt 中,传给 LLM

  4. LLM 基于检索到的内容生成回答

你可以把 RAG 理解为"开卷考试"——AI 不需要把所有知识都记在脑子里,而是在需要时去"翻书"找相关内容,然后基于找到的内容回答问题。

在 AI 编程工具中的应用

  • Cursor 的"代码库索引"功能本质上就是 RAG——它把你的项目代码建立索引,当你提问时自动检索相关文件

  • GitHub Copilot 的 Workspace 模式也是 RAG 的应用

  • 很多团队用 RAG 搭建内部技术文档问答系统

Agent 与工具调用:让 AI 从"说话"到"做事"

什么是 Agent

Agent(智能体)是目前 AI 领域最火的概念之一。简单来说,普通的 LLM 是"一问一答"——你给它输入,它给你输出,然后就结束了。而 Agent 是一个能自主规划、执行多步骤任务、使用工具、根据反馈调整策略的 AI 系统。

一个编程 Agent 的工作流程可能是这样的:

  1. 你说:"帮我给项目添加一个用户收藏功能"

  2. Agent 先读取项目结构,了解代码组织方式

  3. Agent 规划需要修改的文件:新增数据模型、修改网络层、新增 UI 页面、修改路由等

  4. Agent 逐个文件编写代码

  5. Agent 运行编译命令,检查是否有报错

  6. 如果有报错,Agent 读取错误信息,自动修复

  7. 重复编译-修复循环,直到编译通过

  8. 向你汇报完成情况

这就是 Cursor 的 Composer、Windsurf 的 Cascade、Claude Code 等工具背后的核心能力。

工具调用(Function Calling / Tool Use)

Agent 能"做事"的关键是工具调用。LLM 本身只能输出文字,但通过 Function Calling 机制,它可以输出"调用某个工具"的指令,然后由外部程序执行这个工具调用,把结果返回给 LLM,LLM 再基于结果继续下一步。

常见的编程工具包括:

  • 读取文件 / 写入文件 / 搜索文件

  • 执行终端命令(编译、运行测试、git 操作等)

  • 搜索网页 / 查询文档

  • 调用数据库 / API

未来趋势:Agent 是 AI 编程的下一个大方向。目前的 Agent 还处于"能完成简单任务"的阶段,但随着模型能力提升和工具生态完善,未来的编程 Agent 可能能独立完成从需求分析到上线的完整开发流程。当然,这需要时间,现阶段你仍然需要是那个"掌舵的人"。

模型选型:开源 vs 闭源,参数怎么看

闭源模型 vs 开源模型

维度 闭源模型(GPT、Claude、Gemini) 开源模型(Llama、Qwen、DeepSeek、Mistral)
能力上限 通常更强,尤其是复杂推理和代码 追赶中,头部开源模型已接近中低端闭源
成本 按 API 调用付费,长期使用成本较高 免费使用,只需承担服务器/硬件成本
隐私 数据会传到厂商服务器(企业版有隐私承诺) 可本地部署,数据完全不出内网
定制化 有限,只能通过 Prompt 和少量微调 可完全自由微调、量化、修改
使用门槛 低,注册即用 较高,需要 GPU 服务器和运维能力

对个人开发者的建议:日常使用闭源模型(效果好、省心),如果有特殊的隐私需求或成本考量,可以尝试用 Ollama 在本地运行开源模型。

参数量是什么意思

你经常会看到"7B 模型"、"70B 模型"这样的说法,B 代表 Billion(十亿),指的是模型的参数量。

  • 7B~14B:小型模型,可在消费级显卡(甚至笔记本)上运行,适合简单任务和本地部署

  • 32B~70B:中型模型,需要较强的 GPU,能力较强,适合大多数编程任务

  • 100B+:大型模型,需要多卡服务器,能力接近闭源旗舰

一般来说,参数越多能力越强,但也不是绝对的——模型架构、训练数据、对齐方式同样重要。而且参数量越大,运行成本越高、速度越慢。选择时要根据实际需求权衡。


实战篇:iOS 开发者的 AI 编程实操

理论讲了这么多,现在进入最关键的部分——动手实操。我会带你完成 6 个面向 iOS 开发真实场景的实战练习,每个练习都包含完整的 Prompt 和预期效果。

环境准备

在开始之前,请确保你已经:

  1. 下载并安装 Cursorhttps://cursor.com),或使用你熟悉的其他 AI IDE

  2. 注册账号并登录(免费版即可完成大部分练习)

  3. 在 Cursor 中打开一个 iOS 项目(可以是你自己的项目,也可以新建一个测试项目)

  4. 熟悉 Cursor 的基本操作:

    • Cmd+L:打开 AI 对话侧边栏

    • Cmd+K:对选中的代码进行内联编辑

    • @:在对话中引用文件或代码

提示:如果你暂时不想安装 Cursor,也可以用网页版的 ChatGPT / Claude / 豆包 完成这些练习,只是需要手动复制粘贴代码。

实战一:用 AI 生成一个完整的 SwiftUI 页面

场景:你需要快速搭建一个设置页面,包含用户信息、功能开关、列表项等。

步骤

  1. 在 Cursor 中新建一个 Swift 文件,比如 SettingsView.swift

  2. Cmd+L 打开对话,输入以下 Prompt:

你是一个有 5 年经验的 iOS 开发工程师,精通 SwiftUI。

请帮我写一个完整的设置页面 SettingsView,要求:
1. 使用 List + Section 组织内容,分为三个 section:
   - 个人信息:头像、昵称、手机号(点击进入个人资料页)
   - 通用设置:消息通知(Toggle)、深色模式(Toggle)、清除缓存(带缓存大小)
   - 关于:关于我们、隐私政策、版本号(显示在右侧)
2. 使用 SwiftUI 原生控件,不依赖第三方库
3. 适配深色模式
4. ViewModel 使用 @Observable(iOS 17+)或 @ObservedObject,包含所有开关状态和缓存大小
5. 代码要有清晰的注释
6. 头像使用 SF Symbols 的 person.crop.circle.fill 图标作为占位

请只输出 Swift 代码,文件名为 SettingsView.swift。
  1. AI 生成代码后,仔细审查:

    • 导入的框架是否正确(应该是 SwiftUI)

    • API 是否符合你项目的最低 iOS 版本要求(@Observable 需要 iOS 17+)

    • 是否有不存在的 API 或拼写错误

    • 代码风格是否符合你的项目规范

  2. 把代码复制到 Xcode 中编译运行,检查效果

  3. 如果有不满意的地方,继续对话迭代。比如:"把深色模式的 Toggle 改成跟随系统,去掉手动开关"、"缓存大小显示为 XX.X MB 格式"

要点总结

  • 明确指定技术栈(SwiftUI)和架构模式(MVVM)

  • 列出具体的功能清单,不要笼统地说"做一个设置页"

  • 指定最低 iOS 版本要求,避免 AI 使用你项目不支持的 API

  • 生成后必须编译验证,AI 偶尔会用错 API

实战二:用 AI 重构遗留 Objective-C 代码

场景:你的项目里有一段老旧的 Objective-C 代码,需要转换成 Swift,并顺便优化代码质量。

步骤

  1. 在 Cursor 中打开需要重构的 .m 文件

  2. 选中需要转换的代码(或整个文件)

  3. Cmd+K,输入以下 Prompt:

请将这段 Objective-C 代码转换为 Swift,要求:
1. 使用 Swift 的惯用写法(如 struct 替代 C 结构体、enum 关联值替代常量、Codable 替代手动 JSON 解析)
2. 保留原有的业务逻辑,不改变功能
3. 使用 Swift 的错误处理(do-try-catch)替代 NSError 指针
4. 使用闭包(closure)替代 block
5. 添加必要的 @objc 标记如果这个类需要在 ObjC 中调用
6. 代码风格遵循 Swift API Design Guidelines
7. 转换后请在注释中标注哪些地方做了优化,以及为什么

请确保转换后的代码可以直接编译通过。
  1. AI 完成转换后,逐行对比原代码和新代码,确认:

    • 业务逻辑是否完全一致(这是最重要的)

    • 是否有遗漏的边界条件处理

    • 可选型(Optional)的处理是否正确,有没有强制解包的风险

    • 如果原类在 ObjC 中被引用,是否正确添加了 @objc 标记

  2. 在 Xcode 中编译并运行相关功能,确认行为一致

  3. 建议写单元测试覆盖关键逻辑,重构前后测试都通过才算成功

要点总结

  • ObjC 转 Swift 时,最容易出问题的是可选型处理和内存管理(weak/strong)

  • 一定要保留原业务逻辑,AI 可能会"自作聪明"地改变一些行为

  • 对于复杂的重构,建议分小块进行,不要一次性转换整个文件

  • 重构后必须有测试验证,不要只靠肉眼对比

实战三:用 AI 调试崩溃(Crash)

场景:App 出现了一个崩溃,你有崩溃日志,但一时找不到原因。

步骤

  1. 收集崩溃信息:崩溃日志(.crash 文件或 Xcode 崩溃信息)、相关代码文件、复现步骤

  2. 在 Cursor 中按 Cmd+L 打开对话

  3. 用 @ 引用相关的代码文件,然后输入以下 Prompt:

我的 App 出现了一个崩溃,请帮我分析原因并给出修复方案。

【崩溃信息】
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000010
Thread 0 Crashed:
0  libobjc.A.dylib  objc_msgSend + 32
1  MyApp           -[UserManager updateUserInfo:] + 128
2  MyApp           -[ProfileViewController viewDidLoad] + 256

【复现步骤】
1. 进入个人中心页面
2. 快速返回上一页
3. 偶现崩溃

【相关代码】
我已经 @ 引用了 UserManager.m 和 ProfileViewController.m,请查看。

请分析:
1. 崩溃的根本原因是什么?
2. 为什么是偶现的?
3. 给出具体的修复代码
4. 如何预防类似问题
  1. AI 分析后,你会得到一个结构化的诊断结果。以这个常见的野指针崩溃为例,AI 可能会指出:

    • EXC_BAD_ACCESS + objc_msgSend 通常是消息发送给了已释放的对象(野指针)

    • 地址 0x10 很小,说明对象被释放后内存被重用,isa 指针变成了垃圾值

    • 偶现是因为内存释放时机不确定

    • 修复方案:检查 UserManager 的 delegate 是否用了 weak、检查 block 中是否有循环引用、检查多线程下的访问

  2. 根据 AI 的建议检查代码,找到真正的问题点并修复

  3. 如果 AI 的分析不对,提供更多信息继续追问:"我检查了 delegate 是 weak 的,还有什么其他可能?"

要点总结

  • 给 AI 的崩溃信息越完整越好:崩溃类型、崩溃线程、调用栈、复现步骤、相关代码

  • AI 能帮你快速缩小排查范围,但最终定位还是要靠你结合代码实际情况判断

  • 对于复杂的崩溃,可以开启 Zombie Objects、Address Sanitizer 等工具获取更多信息,再喂给 AI

  • 不要盲目相信 AI 的修复方案,一定要理解原因后再修改

实战四:用 AI 写单元测试

场景:你有一个工具类或 ViewModel,需要为它编写单元测试,但写测试很繁琐。

步骤

  1. 在 Cursor 中打开需要测试的 Swift 文件

  2. 选中需要测试的类或函数

  3. Cmd+K,输入以下 Prompt:

请为这段代码编写完整的单元测试,要求:
1. 使用 XCTest 框架
2. 测试类命名为 [被测类名]Tests
3. 覆盖以下测试场景:
   - 正常输入的情况
   - 边界值(空、最大值、最小值)
   - 异常输入(非法格式、nil)
   - 异步方法的测试(使用 XCTestExpectation)
4. 每个测试方法命名为 test_[场景]_[预期结果],如 test_validPhoneNumber_returnsTrue
5. 使用 Given-When-Then 结构组织测试代码
6. 添加清晰的注释说明每个测试的目的
7. 如果有依赖(如网络请求、数据库),使用 Mock/Stub 隔离

请只输出测试代码。
  1. AI 生成测试代码后,审查:

    • 测试用例是否覆盖了关键逻辑分支

    • 断言是否正确(不是只断言 notNil,而是断言具体的值)

    • 异步测试的 expectation 是否正确 fulfill

    • 是否有测试之间的状态依赖(测试应该互相独立)

  2. 在 Xcode 中运行测试,确认全部通过

  3. 如果有测试失败,分析是代码有 Bug 还是测试写错了

要点总结

  • AI 写测试最大的价值是覆盖"正常路径"和"明显边界",但它可能想不到你业务中的特殊边界条件

  • 审查测试时重点看:断言是否有意义、是否测试了真正的逻辑、有没有"为了测试而测试"的废用例

  • 对于有复杂依赖的代码,AI 可能不知道怎么 Mock,你需要手动指导或提供 Mock 类的示例

  • 测试代码也需要维护,不要因为是 AI 写的就降低质量要求

实战五:用 AI 做 Code Review

场景:你写了一段代码,提交 PR/MR 之前想先自己检查一遍有没有问题。

步骤

  1. 在 Cursor 中打开你写的代码文件

  2. Cmd+L 打开对话,用 @ 引用这个文件

  3. 输入以下 Prompt:

请作为一个严格的 iOS 高级开发工程师,对 @引用的这段代码做 Code Review。

请从以下维度检查:
1. **正确性**:有没有逻辑错误、边界条件遗漏、可选型处理不当
2. **性能**:有没有明显的性能问题(如主线程耗时操作、循环里的重复计算、不必要的 UI 刷新)
3. **内存管理**:有没有循环引用、内存泄漏风险
4. **线程安全**:有没有多线程访问共享资源的问题
5. **代码风格**:命名是否清晰、是否符合 Swift 惯例、有没有冗余代码
6. **安全性**:有没有强制解包(force unwrap)、用户输入未校验等风险
7. **可维护性**:函数是否过长、职责是否单一、有没有硬编码

请按以下格式输出:
- 问题等级(🔴 严重 / 🟡 建议 / 🟢 优化)
- 问题位置(文件和函数名)
- 问题描述
- 修复建议(附代码示例)

如果没有问题,也请明确说"未发现明显问题",不要为了找问题而找问题。
  1. AI 会给出一份结构化的 Review 报告。逐条评估:

    • 🔴 严重问题:必须修复

    • 🟡 建议:根据实际情况决定是否修改

    • 🟢 优化:有时间再改

  2. 对于 AI 指出的问题,不要全盘接受,要自己判断是否真的是问题(AI 有时会"误报")

  3. 修复确认的问题后,可以再让 AI Review 一遍确认

要点总结

  • AI Code Review 是"自检"的好工具,但不能替代人类 Reviewer

  • AI 擅长发现"模式化"的问题(强制解包、循环引用、命名不规范),但不擅长发现"业务逻辑"层面的问题

  • 给 AI 提供项目的编码规范(通过 .cursorrules),它的 Review 会更贴合你的项目

  • 把 AI Review 当成"第二双眼睛",而不是"最终裁判"

实战六:用 AI 生成网络层代码

场景:后端给了一份 API 接口文档,你需要生成对应的网络请求代码和数据模型。

步骤

  1. 准备好 API 文档(接口路径、请求方法、参数、响应格式)

  2. 在 Cursor 中按 Cmd+L 打开对话

  3. 输入以下 Prompt(把接口文档内容贴进去):

你是一个有 5 年经验的 iOS 开发工程师。请根据以下 API 文档生成 Swift 代码。

【技术栈要求】
- 网络库:Moya(如果你们项目用 Alamofire 就改成 Alamofire)
- 模型:Codable
- 架构:MVVM,Service 层封装网络请求

【API 文档】
接口:获取用户订单列表
路径:GET /api/v1/orders
请求参数:
- page: Int(页码,从1开始)
- pageSize: Int(每页数量,默认20)
- status: String?(订单状态,可选:pending/shipped/completed/cancelled)

响应格式:
{
  "code": 0,
  "message": "success",
  "data": {
    "list": [
      {
        "orderId": "ORD20240101001",
        "productName": "iPhone 15 Pro",
        "amount": 8999.00,
        "status": "shipped",
        "createTime": "2024-01-01 10:30:00"
      }
    ],
    "total": 100,
    "page": 1,
    "pageSize": 20
  }
}

请生成:
1. 数据模型(Order、OrderListResponse,使用 Codable)
2. Moya 的 TargetType 定义(OrderAPI enum)
3. NetworkService 封装(包含获取订单列表的方法)
4. 日期解码策略(createTime 是 "yyyy-MM-dd HH:mm:ss" 格式)
5. 错误处理

请输出完整的可编译代码。
  1. AI 生成代码后,重点检查:

    • CodingKeys 是否正确(特别是 snake_case 转 camelCase)

    • 可选型是否正确(哪些字段可能为 nil)

    • 日期解码策略是否正确配置

    • Moya 的 baseURL、path、method、task 是否正确

    • 错误处理是否完善

  2. 在实际项目中调用测试,确认解析正确

要点总结

  • 生成网络层代码时,一定要提供完整的 API 文档,包括所有字段和可能的状态

  • AI 可能会"脑补"一些文档中没有的字段,要仔细核对

  • 对于日期、金额等特殊类型,要明确指定解码策略

  • 建议先用 Postman 或 curl 确认接口返回格式,再让 AI 生成代码

高级技巧:.cursorrules 与项目级 Prompt 模板

当你在一个项目中长期使用 AI 编程时,你会发现每次都要重复说明项目规范很麻烦。这时候就需要用到项目级配置。

.cursorrules 文件

在项目根目录创建一个 .cursorrules 文件,Cursor 会自动读取它,并在每次对话时把内容作为系统提示的一部分。这样 AI 就会始终遵循你的项目规范。

一个 iOS 项目的 .cursorrules 示例:

# 项目规范

## 技术栈
- 语言:Swift 5.9+
- UI:SwiftUI(优先),UIKit(遗留页面)
- 架构:MVVM + Coordinator
- 网络:Moya + Combine
- 依赖管理:Swift Package Manager

## 代码规范
- 最低支持 iOS 15.0
- 禁止使用强制解包(!),除非是 IBOutlet 和确定有值的场景
- 禁止使用 try!,必须 do-catch 或 try?
- 函数不超过 50 行,超过则拆分
- 命名遵循 Swift API Design Guidelines
- 代理属性必须用 weak
- 闭包中使用 self 必须用 [weak self]

## 项目结构
- Models: 数据模型
- Views: SwiftUI 视图
- ViewModels: 视图模型
- Services: 业务逻辑和网络请求
- Coordinators: 路由管理
- Utils: 工具类
- Resources: 资源文件

## 输出要求
- 生成代码时遵循以上规范
- 新文件放在对应的目录下
- 如有不确定的地方,先询问再生成

Prompt 模板库

建议建立一个个人的 Prompt 模板库,把常用的 Prompt 保存下来,需要时直接复用。比如:

  • 代码生成模板(指定角色、技术栈、输出格式)

  • 代码审查模板(检查维度、输出格式)

  • Bug 分析模板(崩溃信息、复现步骤、相关代码)

  • 重构模板(重构目标、约束条件、验证方法)

你可以把这些模板存在笔记应用中,或者做成代码片段(Snippet),用的时候快速调用。


最佳实践与未来展望

AI 编程的避坑指南

在使用 AI 编程的过程中,有一些常见的"坑"需要特别注意:

坑一:盲目信任 AI 生成的代码

表现:AI 生成的代码看起来很合理,直接复制粘贴就用,结果上线后出 Bug。

原因:LLM 会"幻觉"——它可能生成一个不存在的 API、记错了方法签名、或者忽略了某个边界条件。

对策

  • 每一行 AI 生成的代码都要经过你的审查

  • 不认识的 API 一定要去查官方文档确认

  • 关键逻辑必须写单元测试

  • 复杂功能先在分支上测试,验证通过再合并

坑二:上下文不足导致 AI 瞎猜

表现:你让 AI 改一个功能,它改出来的东西跟你想要的完全不一样。

原因:AI 不知道你的项目结构、业务逻辑、历史背景,只能根据你给的有限信息"猜"。

对策

  • 提供足够的上下文:相关代码文件、项目规范、业务背景

  • 用 @ 引用精准的文件和代码片段

  • 配置 .cursorrules 让 AI 了解项目规范

  • 复杂任务拆分成小任务,逐步完成

坑三:Prompt 写得太模糊

表现:"帮我优化一下这段代码",结果 AI 改了一堆你不想改的东西。

原因:"优化"可以指性能优化、可读性优化、架构优化……AI 不知道你想要哪种。

对策

  • Prompt 要具体:明确目标、约束、输出格式

  • 用清单列出需求,而不是一句话笼统描述

  • 给出"不要做什么"也很重要("不要改变公共接口"、"不要引入第三方库")

坑四:用 AI 处理不适合它的任务

表现:让 AI 做复杂的架构设计或精确的性能优化,结果方案有很多坑。

原因:AI 缺乏对项目全局的理解和实际运行数据,只能给出"通用最佳实践",不一定适合你的具体情况。

对策

  • 了解 AI 的能力边界,把它用在擅长的地方

  • 复杂决策让 AI 提供多个方案和优缺点分析,最终由你判断选择

  • 性能优化一定要基于实际的 Instruments 数据,不要让 AI 凭"经验"优化

代码安全与隐私注意事项

重要:使用 AI 编程工具时,代码安全和隐私是必须重视的问题。很多公司对代码外泄有严格规定,使用前请确认你公司的政策。

需要注意的点

  1. 不要把敏感代码传给公共 AI 服务:涉及加密算法、密钥、鉴权逻辑、支付系统、用户隐私数据的代码,不要复制到 ChatGPT 等公共服务中。

  2. 了解工具的数据政策

    • GitHub Copilot 企业版:不会用你的代码训练模型

    • Cursor 企业版 / Privacy 模式:不会存储你的代码

    • 免费版 / 个人版:可能会用你的输入改进服务(具体看隐私政策)

  3. 企业级方案:如果公司对代码安全要求高,可以考虑:

    • 使用企业版 AI 编程工具(有隐私承诺和管理功能)

    • 部署私有化的开源模型(如用 Ollama + Qwen/DeepSeek 本地部署)

    • 使用公司内部搭建的 AI 代码助手平台

  4. API Key 安全:如果使用 API 方式调用模型,不要把 API Key 硬编码在代码里,使用环境变量或配置文件管理。

  5. 合规审查:AI 生成的代码可能存在许可证风险(比如训练数据中包含 GPL 代码,生成的代码可能被"污染")。重要项目建议使用代码扫描工具检查。

学习路径建议

如果你想系统地提升 AI 编程能力,建议按以下路径学习:

第一阶段:入门(1~2 周)

  • 安装 Cursor 或 GitHub Copilot,在日常编码中使用代码补全功能

  • 学会写基本的 Prompt:明确角色、任务、要求

  • 用 AI 完成简单任务:生成样板代码、写注释、解释代码

  • 建立"AI 生成的代码必须审查"的意识

第二阶段:进阶(1~2 个月)

  • 熟练使用 AI IDE 的高级功能:@ 引用、内联编辑、Agent 模式

  • 掌握 Prompt Engineering 技巧:Few-shot、Chain-of-Thought、迭代优化

  • 配置 .cursorrules,建立项目级规范

  • 用 AI 完成中等复杂度任务:代码重构、Bug 调试、写单元测试

  • 建立个人 Prompt 模板库

第三阶段:精通(持续学习)

  • 深入理解 LLM 原理:Transformer 架构、Tokenization、Attention 机制

  • 了解 RAG、Agent、Fine-tuning 等进阶技术

  • 尝试本地部署开源模型(Ollama + Llama/Qwen)

  • 探索 AI Agent 在开发流程中的应用(自动 PR Review、自动测试生成等)

  • 关注行业动态,学习新工具和新方法

未来趋势:AI 编程将走向何方

最后,让我们展望一下 AI 编程的未来发展方向:

趋势一:Agent 能力持续增强

目前的编程 Agent 还只能完成相对简单的任务,但随着模型能力提升和工具生态完善,未来的 Agent 将能处理更复杂的多步骤任务,甚至独立完成整个功能模块的开发。你可能只需要描述需求,Agent 就能完成从设计、编码、测试到文档的全流程。

趋势二:IDE 原生 AI 集成

Apple 已经在 Xcode 中加入了 AI 辅助功能(Xcode 16 引入的 Predictive Code Completion),未来会有更深度的集成。当 Xcode 原生支持对话式 AI、项目级理解、Agent 模式时,iOS 开发者将不再需要"双 IDE 协作"的工作流,AI 编程会变得更加无缝。

趋势三:端侧模型与隐私计算

随着模型量化技术和硬件性能的提升,越来越多的 AI 能力将在本地运行。Apple Silicon 的 Mac 已经具备运行中等规模开源模型的能力,未来 Xcode 可能内置本地模型,代码完全不出本机,从根本上解决隐私问题。

趋势四:AI 驱动的开发流程变革

AI 不只是改变"写代码"这一个环节,它正在改变整个软件开发流程:需求分析用 AI、架构设计用 AI、代码生成用 AI、测试用 AI、部署用 AI、运维用 AI……未来的开发者可能更多地扮演"AI 管理者"和"质量把关者"的角色,而不是"代码工人"。

趋势五:自然语言编程的普及

随着 AI 理解能力的提升,"用自然语言描述需求,AI 生成可运行的应用"将越来越普及。这并不意味着程序员会失业——需求的精确描述、系统的架构设计、质量的把控仍然需要专业能力。但编程的门槛会降低,更多非专业开发者也能创建简单的应用。

写在最后:AI 编程不是要取代程序员,而是要赋能程序员。它会淘汰那些只会写重复代码、不思考、不学习的"码农",但会让那些善于学习、善于思考、善于利用工具的开发者变得更强大。

作为 iOS 开发者,我们正站在一个变革的起点。拥抱变化、持续学习、把 AI 当成你的"超能力",你会发现开发变得更高效、更有趣。

祝你在 AI 编程的道路上越走越远!


附录:常用资源汇总

工具下载

学习资源

推荐关注

  • 各大模型厂商的官方博客和更新日志

  • AI 编程工具的官方 Discord / 社区

  • GitHub Trending 中的 AI 编程相关项目

  • 技术社区中分享 AI 编程实践的博主

posted @ 2026-08-28 14:49  Mr.陳  阅读(33)  评论(0)    收藏  举报