作者 | Ivano Di Gese 来源 | Medium Better Programming https://medium.com/better-programming/10-tips-to-be-a-good-swift-developer-7860c1e67337
在编写 iOS 代码时,有一些关键点可以让我们的代码更具可读性、高效和可维护。Swift 是一种现代语言,支持许多现代编程概念,同时保持代码的简洁。
如果你想改进 Swift 代码,可以参考一下以下几点建议。
1. 使用 Protocol
Protocol 在 Swift 中可以做很多事情。使用协议,我们可以设计软件组件的行为,使其符合特定的实现。Swift 协议类似于 Java 中的接口,这是 OOP 编程中最基础的理论。
以下是使用协议的一些场景:
- 让 modal 与呈现它的组件进行通信;
- 让多个 UIViewController 或 多个 Cocoa Touch 类实现相同的行为;
- 在 UITableCell 向父 UIViewControllers 发送事件;
这是我们在 iOS 编码过程中最常见的一些场景。
2. 重构并提高可性
Xcode 11 对重构功能做了很大的改进。新的 Xcode 的重构操作更加简洁,让我们可以很容易重命名类、引用和方法。我已不记得有多少次我认为一个名称是合适的,而后来又决定修改。之前的 Xcode 在这方面做得并不好,但从 Xcode 11 开始,这个操作变得更可靠了。
3. 使用标记
从 Objective-C 开始,我就一直很喜欢标记。当控制器有成百上千行代码时,标记就显得很重要了。使用标签来分割和管理代码非常重要,可以在代码中快速导航。Xcode 11 在右侧有一个代码导航器,基于此可以更频繁地使用标记。
4. 首先代码来实现导航,而不是 Storyboard
Storyboard 很好,自从 Apple 推出后,我就一直使用。但是,当应用程序开始增长,需要处理数十个 ViewController 时,使用代码来管理和处理导航比使用 Segues 和 Storyboards 更加便捷。此外,通过代码导航可以在导航时更好地控制共享参数和特定行为。还可以避免让 Storyboard 变得一团糟。
5. 在项目中集成最热门的第三方库
尽量不要重新发明轮子。为项目选择正确的库是一项有意思的工作,大多数情况下,使用基本库就正确的做法。这可以让你专注于特定应用程序的特定功能,而不是在常见的功能上浪费时间。我经常会用到以下库:
- HTTP 层:使用 Alamofire;
- 图像处理库:使用 Alamofire image 或 Kingfisher;
- 自动布局辅助库,如 Snapkit;
- UI 工具,如 HUD、masonry CollectionView layouts、颜色可渐变库之类的;
更重要的是,保持 Pod 的更新,以避免使用低版本产生的错误。
6. 使用扩展并合理使用它们来创建公共库
我很喜欢 Swift 扩展。在使用 Objective-C 时,我总是不情愿地使用继承。当然这并不总是错误的,正确的使用子类也不会出错。但是 Swift 扩展可以轻松地将简单方法集成到通用类上,而无需做任何复杂的事情。如何还不够的话,在 @IBDesignable 你甚至可以支持 Storyboards 的扩展,它有很多扩展集合,我喜欢编写简短的方法来扩展字符串、按钮等以完成简单的任务。扩展很棒,你可能会过渡使用它。不过没关系,将扩展组织到单独的文件中,保持可读性就行了。
7. 尽可能使用容器视图
随着 UI 越来越复杂,我们通常必须集成 Tab、滑动布局,Page 等内容。容器视图通常不是现成的,需要花一些时间编码,但这绝对是值得的,我们最终总是可以复用这些控制器。
8. 保证 UI 关键组件可见并在顶部输入
有时界面会很有挑战性,特别是在集成了许多功能的应用程序上。幸运的是,我有一位 UI/UX 专家与我一起工作,为我提供了很多有关如何正确操作的建议。但作为开发人员,需要记住两点:
- 首先,不要让导航过于复杂,除非有简单的方法可以返回主页可撤消操作,否则不要在模态上再展示模态,也不要在 UINavigationController 上 push 多个组件。使用 UITabBarControllers、抽屉和类似的方法来简化操作。
- 其次,尽可能选择在屏幕上方输入。用户可能被迫伸出手来操作它,但是最好实现 UIScrollView 并处理滚动操作以避免键盘覆盖输入内容。
9.使用通知
通知中心是在组件之间分发消息的好工具。在开发文档中,通知是在控制器与模型或服务之间实施通信可同步模式的正确方法,我在项目中经常使用 Notification Center,基本上实现了观察者模式,并让应用程序带有更多响应式的元素。
可以使用观察者模式实现许多关键功能,我发现它非常有用。该方法非常简单,且大多数操作都可以用一行代码进行编码,使用 target 和 user info 来传递所有数据。一个重要的建议是:需要在 deinit 或 viewWillDisappear 方法中删除未使用和不必要的观察者,以避免内容泄漏和重载。
10. 事件操作中 sender 参数非常有用
最后一个技巧是使用 sender 参数。每个响应事件的方法或选择器都可以知道是谁触发了事件。在常见情况下,请考虑这样一个场景,使用具有相似行为的多个按钮,来处理相同的操作。只需要将所有 UIButton 连接到相同的 @IBAction,然后使用发送方找出触发了该事件中的哪一个,并为该特定行为编写正确的实现即可。此外,在 UI 元素上使用 tag 来标识它们,而不是使用其标题或其它内容来区分。
结论
我没有提到所有基本的 OOP 原则。显然,您必须以正确的方式实现类,封装,抽象和设计模式。在本文中,我将重点更多地放在Swift功能上,以提高代码效率并传递Swift机制的优点。我提供了一些简单的示例,说明每个iOS应用程序和开发人员应关注的重点。
- EOF -