作为测试,我创建了两个框架。两个框架都包含此扩展:
public extension UIDevice {
var extraInfo: UIDeviceExtraInfo {
return UIDeviceExtraInfo()
}
}
public class UIDeviceExtraInfo {
public var prop: String = "Device1" //"Device2" is used in another framework
}
然后我导入了两个框架并尝试打印UIDevice.currentDevice().extraInfo.prop
。 Swift 编译器给出错误:Ambiguous use of extraInfo"
.
如何解决这样的名称冲突呢?
在这种特定情况下,您可以消除歧义extraInfo
prop 通过显式指定预期类型:
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
但是,当方法/属性返回相同类型时:
// 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) // -> ???
没有办法消除它们的歧义。并且无论应用程序代码导入哪个框架,it seems,实际调用的实现取决于中的顺序链接的框架和库以“先到先得”的方式。但是,据我所知,这种行为并不能得到保证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)