Extensión rápida: la misma función de extensión en dos módulos
Digamos que tengo un Framework llamado SwiftKit, que tiene un método de clase de extensión de UIView llamado someClassMethod y una propiedad llamada someProperty dentro de él:
// SwiftKit
public extension UIView {
class func someClassMethod() {
print("someClassMethod from Swift Kit")
}
var someProperty: Double {
print("someProperty from Swift Kit")
return 0
}
}
Y también tengo un Framework llamado SwiftFoundation, que también tiene un método de clase de extensión de UIView llamado someClassMethod y una propiedad llamada someProperty dentro de él:
// SwiftFoundation
public extension UIView {
class func someClassMethod() {
print("someClassMethod from Swift Foundation")
}
var someProperty: Double {
print("someProperty from Swift Foundation")
return 0
}
}
Luego, creé un proyecto que introdujo estos Frameworks, si importo a ambos en el mismo archivo rápido y accedo a esas extensiones, obtengo el error "Uso ambiguo de someProperty / someClassMethod ()", incluso si especifiqué la llamada en la forma de 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()'
}
}
Si solo importo uno de ellos, el error ambiguo desaparece, pero sucede algo más extraño:
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()
}
}
La consola imprime:
propiedad de la Fundación Swift
someClassMethod de la Fundación Swift
Mi pregunta es: ¿Cómo puedo llamar a estas extensiones (tanto método de clase / instancia, propiedades) sin ambigüedad? Si no puedo, ¿significa que deberíamos agregar un prefijo a los nombres de extensión como lo hacemos habitualmente con Objective-C?