Ответ 1
В этом конкретном случае вы можете disambiguate extraInfo
prop посредством explicilty, определяющего ожидаемый тип:
import FW1
import FW2
let fw1Info = UIDevice.currentDevice().extraInfo as FW1.UIDeviceExtraInfo
let fw2Info = UIDevice.currentDevice().extraInfo as FW2.UIDeviceExtraInfo
print(fw1Info.prop) // -> Device1
print(fw2Info.prop) // -> Device2
Но, когда метод /prop возвращает один и тот же тип:
// FW1
public extension UIDevice {
var myInfo: String { return "Device1" }
}
// FW2
public extension UIDevice {
var myInfo: String { return "Device2" }
}
// App
import FW1
print(UIDevice.currentDevice().myInfo) // -> ???
Невозможно устранить их. И независимо от того, какой код приложения импортирует, какой Framework, по-видимому, фактическая вызываемая реализация зависит от порядка в Связанных рамок и библиотек в способе "Первый пришел, первым обслужен". Но, насколько я знаю, это поведение не гарантируется.