在开发应用程序时,我使用扩展来隐藏对代码中特定库的依赖。我希望方法名称与库中的名称完全相同。
这种方法有助于大大减少对外部库的依赖(将其与另一个库交换,我只需要重写桥中的函数)。但是,在扩展的情况下,它有点棘手,因为我使用此代码进行无限循环:
// 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()
在前面提到的情况下,这样的召唤是不可能的,因此问题。