Swift开发者的日常:从一杯咖啡到App Store部署

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

2025年Swift开发者的典型工作日是什么样的

\n\n

当我刚开始学习Swift时,我以为iOS开发者就像是魔法师,从早到晚在时尚的共享办公空间里一边喝着拿铁一边编写完美的代码。现实,正如你所猜到的,要平淡得多,但同样有趣。

\n\n

在这篇文章中,我将带你了解Swift开发者的典型工作日——从早上的咖啡到晚上推送到App Store。你不仅会看到时间表,还会看到我们每天遇到的实际代码片段。开始吧!

\n\n

09:00 — 早晨:每日站会和计划

\n\n

一天从Zoom或Slack上的简短站会开始。我们团队有5名iOS开发者、2名后端开发人员和1名产品经理。每人说1-2分钟:昨天做了什么,今天计划做什么,是否有阻碍。

\n\n

我典型的回答是这样的:

\n\n
    \n
  • 昨天:完成了基于Combine的授权模块重构。
  • \n
  • 今天:集成新的SwiftUI个人资料页面,需要制作过渡动画。
  • \n
  • 阻碍:等待设计师提供深色主题的最终设计稿。
  • \n
\n\n

站会后——花15分钟查看Jira和GitHub上的消息。看看哪些PR需要我审查,并阅读自己拉取请求上的评论。

\n\n

09:45 — 第一次深度工作:新功能

\n\n

早晨是处理复杂任务的最佳时间。今天我编写带有深度链接的推送通知模块。以下是处理程序类的典型结构:

\n\n
import UIKit\nimport UserNotifications\n\nfinal class PushNotificationHandler: NSObject, UNUserNotificationCenterDelegate {\n    \n    func userNotificationCenter(\n        _ center: UNUserNotificationCenter,\n        didReceive response: UNNotificationResponse,\n        withCompletionHandler completionHandler: @escaping () -> Void\n    ) {\n        let userInfo = response.notification.request.content.userInfo\n        \n        guard let deepLink = DeepLinkParser.parse(userInfo) else {\n            completionHandler()\n            return\n        }\n        \n        Task { @MainActor in\n            Coordinator.shared.handle(deepLink)\n        }\n        \n        completionHandler()\n    }\n    \n    func userNotificationCenter(\n        _ center: UNUserNotificationCenter,\n        willPresent notification: UNNotification,\n        withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void\n    ) {\n        completionHandler([.banner, .sound, .badge])\n    }\n}
\n\n

注意Task { @MainActor in }——这是在主线程上强制执行操作的现代方式,取代了过时的DispatchQueue.main.async。iOS开发者现在积极使用Swift 5.5+中的Concurrency。

\n\n

11:00 — 代码审查:从外部视角

\n\n

收到同事的通知:“请看一下PR”。打开GitHub,看到数据模型的更改。以下是我经常评论的例子:

\n\n
// ❌ 不好:强制解包\nlet user = users.first!\n\n// ✅ 好:安全提取\nguard let user = users.first else {\n    assertionFailure("在此阶段users列表不应为空")\n    return\n}
\n\n

在代码审查中,我们不仅讨论正确性,还讨论架构。今天同事使用了带有@ObservableObject的SwiftUI,但根据我们的代码风格,我们正在转向@Observable(iOS 17+)。我温和地指出:

\n\n
// 建议重写为 @Observable\n@Observable\nfinal class ProfileViewModel {\n    var name: String = ""\n    var age: Int = 0\n}
\n\n

12:30 — 午餐和切换上下文

\n\n

午餐是神圣的。我出门散步或自己做饭。尽量不看屏幕——让眼睛休息。午餐时我经常看Telegram...

博客

书籍推荐