如果你有一个团队商定一套通用和杂项增强功能,它们混为一谈一起作为Extensions.swift工作作为保它,简单的第一级解。但是,随着复杂性的增长,或者扩展变得更加复杂,需要一个层次来封装复杂性。在这种情况下,我会举一个例子来推荐以下做法。
我有一堂课与我的后台谈话,名为Server
。它开始扩大以覆盖两个不同的目标应用程序。有些人喜欢一个大文件,但只是逻辑上与扩展分开。我的首选是保持每个文件相对较短,所以我选择了以下解决方案。Server
最初符合CloudAdapterProtocol
并实施了所有方法。我所做的就是把协议变成一个层次,通过使指下级协议:
protocol CloudAdapterProtocol: ReggyCloudProtocol, ProReggyCloudProtocol {
var server: CloudServer {
get set
}
func getServerApiVersion(handler: @escaping (String?, Error?) -> Swift.Void)
}
在Server.swift
我
import Foundation
import UIKit
import Alamofire
import AlamofireImage
class Server: CloudAdapterProtocol {
.
.
func getServerApiVersion(handler: @escaping (String?, Error?) -> Swift.Void) {
.
.
}
Server.swift
然后就实现了设置服务器核心服务器API并获取API版本。真正的工作分为两个文件:
Server_ReggyCloudProtocol.swift
Server_ProReggyCloudProtocol.swift
这些实施各自的协议。
这意味着您需要在其他文件中使用导入声明(对于此示例中的Alamofire),但是在我的视图中,对于隔离界面而言,它是一个干净的解决方案。
我认为这种方法与外部指定的类以及您自己的方法同样适用。
这不是一个codereview问题 - 我不关心这个特定的例子,我想知道什么是快速命名约定。 – AlBlue 2014-10-11 22:10:48
没有命名约定。我们唯一需要做的就是Objective-C的类别,它们总是遵循'ClassName + ExtensionName'格式,并且我没有看到太多人仍在使用它。此外,我发现笨重的代替只是将类和扩展定义在一起,或者给文件一个更好的名字,比如'FooAbleTypes'和定义实例。 – CodaFi 2014-10-11 22:17:18
有*是*没有命名的做法。以下是一个想法:将所有全局扩展集中在一个'Extensions.swift'中。这样,你就不会失去他们的踪迹,新代码将立即注意到他们。我宁愿将一次性扩展保留为需要的文件的私有文件。 – Andrew 2014-10-11 22:38:30