Swift:两个扩展中的相同功能,不同的模块

时间:2018-06-04 08:23:47

标签: ios swift module extension-methods

在开发应用程序时,我使用扩展来隐藏对代码中特定库的依赖。我希望方法名称与库中的名称完全相同。

这种方法有助于大大减少对外部库的依赖(将其与另一个库交换,我只需要重写桥中的函数)。但是,在扩展的情况下,它有点棘手,因为我使用此代码进行无限循环:

// Library implementation, File1.swift
import Foundation
extension Date {
  func test(otherDate: Date) -> String {
    return String()
  }
}


// App reference to the library, different module, File2.swift
import Foundation
import Library
extension Date {
  func test(otherDate: Date) -> String {
    // How to reference "Library" here?
    return test(otherDate: otherDate)
  }
}

添加前缀时,方法可以正常工作:

// Works correctly:
import Foundation
import Library
extension Date {
  func prefix_test(otherDate: Date) -> String {
    return test(otherDate: otherDate)
  }
}

Swift中是否有任何方法可以从特定模块调用扩展方法,类似于选择类

// Selecting a class:
let a = Module1.CustomClass()
let b = Module2.CustomClass()

let date = Date()

// Can I select an extension method?
date.Module1.func1()
date.Module2.func1()

这个问题与"重复":有何不同 在类功能的情况下,可以这样做:

Module1.Class1.classFunction()
Module2.Class1.classFunction()

在前面提到的情况下,这样的召唤是不可能的,因此问题。

0 个答案:

没有答案