Extensão rápida: mesma função de extensão em dois módulos
Digamos que eu tenho um Framework chamado SwiftKit, que possui um método de classe de extensão do UIView chamado someClassMethod e uma propriedade chamada someProperty dentro dele:
// SwiftKit
public extension UIView {
class func someClassMethod() {
print("someClassMethod from Swift Kit")
}
var someProperty: Double {
print("someProperty from Swift Kit")
return 0
}
}
E também tenho um Framework chamado SwiftFoundation, que também possui um método de classe de extensão do UIView chamado someClassMethod e uma propriedade chamada someProperty:
// SwiftFoundation
public extension UIView {
class func someClassMethod() {
print("someClassMethod from Swift Foundation")
}
var someProperty: Double {
print("someProperty from Swift Foundation")
return 0
}
}
Em seguida, criei um projeto que introduziu essas estruturas, o que é importante: se eu importar as duas no mesmo arquivo rápido e acessar essas extensões, obtive o erro "Uso ambíguo de someProperty / someClassMethod ()", mesmo se eu especificasse a chamada em no formato SwiftKit.UIView.someClassMethod ():
import UIKit
import SwiftKit
import SwiftFoundation
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.someProperty // error: Ambiguous use of 'somProperty'
SwiftKit.UIView.someClassMethod() // error: Ambiguous use of 'someClassMethod()'
}
}
Se eu importar apenas um deles, o erro ambíguo desaparece, mas algo mais estranho acontece:
import UIKit
import SwiftKit
//import SwiftFoundation
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.someProperty
SwiftKit.UIView.someClassMethod()
}
}
O console imprime:
someProperty da Fundação Swift
someClassMethod da Swift Foundation
Minha pergunta é: como posso chamar essas extensões (método de classe / instância, propriedades) sem ambíguas? Se não posso, isso significa que devemos adicionar prefixo aos nomes das extensões, como costumamos fazer com o Objective-C?