Быстрое расширение: одинаковая функция расширения в двух модулях
Скажем, у меня есть Framework под названием SwiftKit, в котором есть метод класса расширения UIView с именем someClassMethod и свойство с именем someProperty внутри него:
// SwiftKit
public extension UIView {
class func someClassMethod() {
print("someClassMethod from Swift Kit")
}
var someProperty: Double {
print("someProperty from Swift Kit")
return 0
}
}
И у меня также есть Framework под названием SwiftFoundation, в котором также есть метод класса расширения UIView с именем someClassMethod и свойство с именем someProperty внутри него:
// SwiftFoundation
public extension UIView {
class func someClassMethod() {
print("someClassMethod from Swift Foundation")
}
var someProperty: Double {
print("someProperty from Swift Foundation")
return 0
}
}
Затем я создал проект, который представил эти Frameworks, но если я импортирую их оба в один и тот же файл swift и получу доступ к этим расширениям, я получу ошибку «Неоднозначное использование someProperty / someClassMethod ()», даже если я указал вызов в форма 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()'
}
}
Если я импортирую только один из них, неоднозначная ошибка исчезнет, но произойдет более странная вещь:
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()
}
}
На консоли распечатайте:
SomeProperty от Swift Foundation
someClassMethod от Swift Foundation
Мой вопрос: как я могу назвать эти расширения (оба метода класса / экземпляра, свойства) без неоднозначности? Если я не могу, значит ли это, что мы должны добавить префикс к именам расширений, как мы обычно делаем с Objective-C?