引言
在日常 iOS 开发中,许多老项目依然使用 Objective-C 编写 UI 界面,尤其是那种纯代码布局方式。虽然这些代码还能跑,但随着 Swift 成为主流,开发者更愿意用 Swift 来维护、扩展甚至重构项目。然而,将这些 OC 写的 UI 代码逐句手动翻译为 Swift,不仅枯燥耗时,还容易出错。
有没有更快、更智能的方式?当然有!
随着 AI 工具的不断发展,像 GitHub Copilot、Amazon CodeWhisperer、Cursor AI 等智能助手,已经能协助我们完成大量代码迁移和重构工作。而在实际体验中,ChatGPT 更是成为了我处理这类重复性任务时的首选利器。
今天这篇文章,就带你看看如何利用 AI 尤其是 ChatGPT,让我们把 Objective-C 的 UI 界面“秒转”为 Swift,实现效率的大幅提升,甚至敢说——提效 90%!
示例背景与目标:Objective-C 写法的典型代表
我们以实际项目中的UI组件为例——MineUserInfoCell,它是一个用于展示用户信息的Cell,使用纯代码的方式 实现了头像、用户名、用户ID以及右侧箭头灯视图的布局,使用的是语言和 Masonry 进行 AutoLayout 布局。
简化后的OC代码如下:
- (void)configView {
UIImageView *avatarImgView = [[UIImageView alloc] init];
[self.contentView addSubview:avatarImgView];
avatarImgView.layer.masksToBounds = YES;
avatarImgView.layer.cornerRadius = 32;
[avatarImgView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(@16);
make.top.equalTo(@4);
make.size.mas_equalTo(CGSizeMake(64, 64));
}];
UILabel *nameLabel = [[UILabel alloc] init];
nameLabel.font = [UIFont boldSystemFontOfSize:16];
nameLabel.textColor = [UIColor blackColor];
[self.contentView addSubview:nameLabel];
[nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(avatarImgView.mas_trailing).offset(12);
make.top.equalTo(@8);
}];
// ...其他视图略
}
这在过去,我们通常需要“手动”将这些UI元素注意迁移到Swift,包括属性定义、初始化、样式设置、布局约束等,非常繁琐。
我们的目标是:
借助 AI 工具,将如上的 Objective-C 纯代码 UI 自动转写为 Swift 等效代码,尽可能完整还原功能,并采用更符合 Swift 编码习惯的风格(如使用 SnapKit 或原生 AutoLayout)。
最终,你会看到我们如何通过 ChatGPT ,快速高效完成这一步骤,实现令人惊讶的开发提效。
实操演示:如何使用 AI 工具完成转换
有了明确的目标之后,我开始尝试用 AI 工具来“解放双手”。
我们就以 MineUserInfoCell 中的部分 OC 纯代码 UI 为例,来展示整个转换和优化的过程。
第一步:选中Xcode中对应文件,告诉ChatGPT你的初步诉求
我们打开需要优化的文件,然后再点击ChatGPT应用,这时候它就会提示你使用Xcode选卡,点击后定位到当前文件,然后在对话框中输入我们的诉求。
这时候 ChatGPT 首先会先对该文件进行详细解析,然后提出优化建议。但我们需要做的是转换为Swift代码,为此需要手动创建一个 Swift 文件就叫MeInfoCell.swift,然后选择该文件,继续与ChatGPT 对话,进一步提出将内容平移的诉求。
这个时候 ChatGPT 会开始执行构建,在构建过程中我们可以选择授权 ChatGPT 直接操作 Xcode。
当 ChatGPT 构建完成之后,该文件内就会自动生成了代码。
第二步:优化 prompt
但是往往呢一次操作很难直接达到我们期待的效果,所以我们可以根据执行结果,来慢慢优化我们的提示词,来不断地完善和调整代码。
我们先来看一下第一次生成后的代码:
//
// ZMMeInfoCell.swift
// ZMSports
//
// Created by 胖虎 on 2025/4/11.
// 用户信息cell
import UIKit
class ZMMeInfoCell: UITableViewCell {
private let avatarImageView = UIImageView()
private let nameLabel = UILabel()
private let userIdLabel = UILabel()
private let arrowImageView = UIImageView()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
configView()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
configView()
}
private func configView() {
avatarImageView.layer.cornerRadius = 32
...
}
override func layoutSubviews() {
super.layoutSubviews()
avatarImageView.frame = CGRect(x: 16, y: 16, width: 64, height: 64)
nameLabel.frame = CGRect(x: avatarImageView.frame.maxX + 12,
y: avatarImageView.frame.minY + 4,
width: contentView.frame.width - avatarImageView.frame.maxX - 60,
height: 20)
userIdLabel.frame = CGRect(x: nameLabel.frame.minX,
y: nameLabel.frame.maxY + 6,
width: nameLabel.frame.width,
height: 18)
arrowImageView.frame = CGRect(x: contentView.frame.width - 24 - 16,
y: (contentView.frame.height - 24) / 2,
width: 24,
height: 24)
}
// Public method to configure cell with data model
func updateUI(with model: UserModel) {
nameLabel.text = model.nickname
userIdLabel.text = "ID: \(model.userId)"
if let avatarUrl = model.avatarURL {
// Use your preferred image loading logic here, e.g., SDWebImage or URLSession
avatarImageView.image = UIImage(named: "defualt_avatar") // Placeholder
}
}
}
可以看见生成的代码基本可以满足要求,但是我们还需要更细节的控制,比如方法的命名、布局的方式、以及代码注释。
接下来我们进一步优化提示词:
ChatGPT会进一步进行分析优化代码,优化结果如下:
import UIKit
import SnapKit
// 用户信息 cell,显示头像、昵称、用户ID 和跳转箭头
class ZMMeInfoCell: UITableViewCell {
/// 用户头像
private let avatarImageView = UIImageView()
/// 用户昵称
private let nameLabel = UILabel()
/// 用户ID
private let userIdLabel = UILabel()
/// 右侧跳转箭头
private let arrowImageView = UIImageView()
// MARK: - Initializer
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupView()
setLayout()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupView()
setLayout()
}
// MARK: - Setup Views
/// 添加子视图并配置样式
private func setupView() {
// 头像
avatarImageView.layer.cornerRadius = 32
avatarImageView.clipsToBounds = true
avatarImageView.contentMode = .scaleAspectFill
avatarImageView.image = UIImage(named: "defualt_avatar")
contentView.addSubview(avatarImageView)
// 昵称
nameLabel.font = UIFont.boldSystemFont(ofSize: 16)
nameLabel.textColor = UIColor.black
contentView.addSubview(nameLabel)
// 用户ID
userIdLabel.font = UIFont.systemFont(ofSize: 13)
userIdLabel.textColor = UIColor.gray
contentView.addSubview(userIdLabel)
// 跳转箭头
arrowImageView.image = UIImage(named: "mine_right_arrow")
contentView.addSubview(arrowImageView)
}
// MARK: - Layout
/// 使用 SnapKit 设置约束
private func setLayout() {
// 头像
avatarImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.top.equalToSuperview().offset(4.0)
make.size.equalTo(CGSize(width: 64, height: 64))
make.bottom.equalToSuperview().offset(-12.0)
}
// 昵称
nameLabel.snp.makeConstraints { make in
make.left.equalTo(avatarImageView.snp.right).offset(12)
make.top.equalTo(avatarImageView.snp.top).offset(4)
make.right.lessThanOrEqualTo(arrowImageView.snp.left).offset(-12)
}
// 用户ID
....
// 跳转箭头
...
}
// MARK: - Public Method
// /// 更新 cell 展示内容
...
}
经过第二次提示词的优化,可以看见代码基本已经可以满足所有要求。如果还有其它要求,我们可以进一步优化提示词来要求 ChatGPT 帮忙进行结构优化或者提炼通用组件等等。
对比分析:效率提升体现在哪里?
经过实操,我们可以非常清晰地看到:使用 AI(特别是 ChatGPT)来辅助 Objective-C 到 Swift 的 UI 迁移,不只是“节省了一点时间”那么简单,它带来的提升可以从多个维度展开:
时间效率:
可以看见使用AI我们只需要告诉它我们想要做什么,其它的操作都会帮我们快速执行。几乎可以节省80%~90%的时间,尤其在有多个类似组件需要迁移的场景下,这种提升是成倍放大的。
代码风格与可维护性提升:
手动迁移时,我们可能只是“照搬”,但 ChatGPT 返回的代码通常会:
- 使用更现代的 Swift 写法(如 let 替代 var,类型推断,结构体优先)
- 默认支持 SnapKit,结构清晰
- 主动拆分出 setupUI()、updateUI() 等方法,提高可维护性
- 对 UI 命名、常量使用更符合 Swift 开发规范
开发体验:从机械体力活变成思维引导
过去我们把时间花在“翻译代码”这类低产出的工作上;而现在,只需要:
- 善用 prompt 去引导 AI
- 根据输出快速微调
- 把节省下来的时间花在更有价值的业务逻辑或结构设计上
说到底,AI 不会替你做所有事,但它会把“体力活”变成“选择题”。
总结:AI 是开发者最好的副驾驶
可以看见借助AI原本需要耗费大量时间和精力的重复性工作,现在只需一个合适的 prompt,几分钟内就能完成大部分内容,甚至还能带来结构更清晰、风格更现代的代码产出。
当然,AI 并不能代替我们思考,但它已经可以成为我们开发过程中的“副驾驶”——
- 你掌握方向,它帮你加速;
- 你定下目标,它协助实现;
- 你有判断力,它提供参考建议。
未来不远,或许我们写的每一行代码,都将有 AI 的影子。但此刻,我们可以从一次次“小场景”的提效中,真正看到 AI 对开发工作的价值。
如果你也正忙着维护老项目、重构 UI,又或者只是想节省时间,不妨试试 —— 让 ChatGPT 帮你写一段 Swift UI 布局代码,效果可能会让你惊喜。