As a test, I created two frameworks. Both frameworks contain this extension:
public extension UIDevice {
var extraInfo: UIDeviceExtraInfo {
return U
In this specific case, you can disambiguate extraInfo
prop by explicilty specifying expected type:
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
But, when the method/prop return the same type:
// 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) // -> ???
There is no way to disambiguate them. And regardless the application code imports which Framework, it seems, the actual called implementation depends on the order in Linked Frameworks and Libraries in "First come, first served" manner. But, as far as I know, this behavior is not guaranteed.
Found this on a project where I have CryptoSwift and after that I was already "compiled" a propietary framework without source code only header files.
So in this moment you have 3 options:
extension Data {
public var myBytes: Array<UInt8> {
return Array(self)
}
}
See that now I have to change all the calls of my code to myBytes and that I have the source code to implement this call, so no more collisions even if you cant do 1 or 2 (because to much hasle). If you cant do any of the 3, I guess there is no solution.
BY the way, it is unfortunate that swift doesn't support a way to disambiguate this on the language itself.
After doing a bit of experimentation, the only way I've found is to only import one of the frameworks into your source file.