我在哪里使用扩展?

时间:2016-08-03 09:13:56

标签: ios swift

我知道扩展是为了扩展您无法访问原始源代码的类型,但是一些开发人员在自己创建的类中使用扩展。

抱歉我的英语:(

示例:

class Category: Mappable {
     var PostCategoryId: Int?
     var Name: String?
     private(set) var Slug: String?
     private(set) var PostCategoryParentId: Int?
     private(set) var PostCategoryParentPath: String?
     var childCategories: [Category]?
     var parentCategory: Category?

     init() {

     }

}

extension Category {

     enum CategoryId: Int {

      case Comedy = 4
      case Action = 6
      case Animation = 10
     }
}

2 个答案:

答案 0 :(得分:1)

我发现的一个用途可用于将您自己的逻辑与符合协议时必须实现的方法分开。例如:

class MyClass {
  // My custom logic
}

extension MyClass : SomeProtocol {
  // Implement protocol methods here
}

这纯粹是一种代码组织技巧,但我发现它有助于使事情更易于维护。

另一个例子是使用协议扩展来定义协议方法的默认实现。一个例子:

protocol Askable {
    func ask() -> Int
}

extension Askable {
    func ask() -> Int {
        return 0
    }
}

我确定开发人员已经提出了一些其他用途,所以我期待其他一些答案。

答案 1 :(得分:-1)

当视图具有一定的功能集,其他类扩展该功能,但也具有子类可以选择使用或不使用的其他可选功能(这是扩展名)时,这可能很有用

一个例子可能是有一个扩展,它实现了一些可以在子类中重用的委托方法,也许是uiviewcontroller中的子视图,子类可能有也可能没有,如果子类确实有tableview,那么他们可以使用扩展而不是重写委托方法的代码(如果它总是将是相同的代码)