【问题标题】:Understanding Swift extension usage in your API design [duplicate]了解 API 设计中的 Swift 扩展使用 [重复]
【发布时间】:2016-04-02 20:58:17
【问题描述】:

Alamofire API 在 ResponseSerialization.swift 中有 extension Request 等扩展。在设计 Swift API 时,为什么要采用这种方法,而不是仅仅将这些方法添加到 Request 类 (Request.swift) 中?

我了解在您不控制源代码时使用扩展程序来扩展 API。这个问题是关于使用它们来扩展您自己的 API。

【问题讨论】:

  • 这个文件中的所有扩展都需要在 ResponseSerializer 的上下文中,因此它们的“自然位置”在 ResponseSerializer.swift 中比在 Request.swift 中更好。

标签: swift alamofire swift-extensions


【解决方案1】:

为了清洁或向您未创建的其他类添加功能(即extension UIColor)。您可以创建单独的扩展来添加单独的功能。

例如,如果您有一个UIViewController,并且您将一个表格视图添加到它的视图中,而不是使 ViewController 的声明看起来像这样:

class ViewController : UIViewController, UITableViewDataSource, UITableViewDelegate

您可以使用扩展名将它们分开,这样您就不会弄乱您的 ViewController 文件。

像这样:

extension ViewController : UITableViewDataSource, UITableViewDelegate

您可以将其从 ViewController 类的主体中分离出来或提取到一个新文件中。

【讨论】:

  • 恐怕你错过了要点,因为 OP 可能会问为什么有人会扩展他们自己的课程,而不是其他人的课程。
  • @EarlGrey 是的,我在我的视图控制器示例中引用了扩展您自己的类,人们可能想要扩展自己的类的一个原因是为了代码的清洁和组织。
【解决方案2】:

扩展是 Swift 编程语言的最佳特性之一,它们有多个用例。一旦你掌握了它们,你就可以想出一些非常好的和易于理解的代码。一些用例是:

1。扩展系统类型

使用 Swift,您可以使用任何系统类型,例如 IntString,以使某些代码更具可读性并获得更多您必须自己编写的功能。例如,查看以下重复某些任务多次的代码:

extension Int {
    func repetitions(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
}

您可以扩展Int 并使其更具可读性,而不是为任务重复创建单独的函数并管理多个参数:

3.repetitions({
    print("Hello!")
})

// Hello!
// Hello!
// Hello!

每个人都同意这是您可以创建的最简单、最干净的代码。

2。 让凌乱的代码可读

检查以下定义:

class MyTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, CLLocationManagerDelegate {
   // a lot of functions 
}

如果你把所有东西都放在一个类或结构中,代码会在某一时刻变得混乱,并且很难跟踪哪个方法属于哪个协议或类。相反,你应该使用这个:

class MyTableViewController: UIViewController {
}

extension MyTableViewController: UITableViewDelegate {
}

extension MyTableViewController: UITableViewDataSource {
}

// etc...

3。协议扩展

协议扩展是 Swift 最酷的特性之一。它们允许向采用您正在扩展的协议的任何类添加方法。例如让我们扩展CollectionType 协议。

extension CollectionType {
   func printAll() {
      print(self)
   }
}

现在您可以在任何采用此协议的结构上使用方法printAll()!其中一些是原生 Swift 类型,例如 ArrayDictionarySet

这些只是扩展的一些主要用途,它们可以做更多的事情:

  • 添加计算实例属性和计算类型属性
  • 定义实例方法和类型方法
  • 提供新的初始化器
  • 定义下标
  • 定义和使用新的嵌套类型
  • 使现有类型符合协议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多