Swift-Erweiterung: gleiche Erweiterungsfunktion in zwei Modulen
Say Ich habe ein Framework namens SwiftKit, das eine UIView-Erweiterungsklassenmethode namens someClassMethod und eine Eigenschaft namens someProperty enthält:
// SwiftKit
public extension UIView {
class func someClassMethod() {
print("someClassMethod from Swift Kit")
}
var someProperty: Double {
print("someProperty from Swift Kit")
return 0
}
}
Und ich habe auch ein Framework namens SwiftFoundation, das auch eine UIView-Erweiterungsklassenmethode namens someClassMethod und eine Eigenschaft namens someProperty enthält:
// SwiftFoundation
public extension UIView {
class func someClassMethod() {
print("someClassMethod from Swift Foundation")
}
var someProperty: Double {
print("someProperty from Swift Foundation")
return 0
}
}
Dann habe ich ein Projekt erstellt, in dem diese Frameworks vorgestellt wurden. Wenn ich beide Frameworks in dieselbe SWIFT-Datei importiere und auf diese Erweiterungen zugreife, wird der Fehler "Mehrdeutige Verwendung von someProperty / someClassMethod ()" angezeigt, auch wenn ich den Aufruf angegeben habe in Form von 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()'
}
}
Wenn ich nur einen davon importiere, verschwindet der mehrdeutige Fehler, aber es passiert etwas Seltsameres:
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()
}
}
Die Konsole ausdrucken:
someProperty von der Swift Foundation
someClassMethod von Swift Foundation
Meine Frage lautet: Wie kann ich diese Erweiterungen (sowohl Klassen- als auch Instanzmethode, Eigenschaften) ohne Mehrdeutigkeit aufrufen? Wenn ich nicht kann, heißt das, dass wir den Erweiterungsnamen ein Präfix hinzufügen sollten, wie wir es normalerweise mit Objective-C tun?