我有两个包:FirstModule
和AnotherModule
,并且它们中的每一个定义了
extension CGPoint {
public static func + (lhs: CGPoint, rhs: CGPoint) -> CGPoint {
CGPoint(x: lhs.x + rhs.x, y: lhs.y+rhs.y)
}
}
也在我定义的主应用程序中
extension CGPoint {
#if !canImport(FirstModule) && !canImport(AnotherModule)
public static func + (lhs: CGPoint, rhs: CGPoint) -> CGPoint {
CGPoint(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}
...
#endif
}
和另一个文件中某些类:
#import FirstModule
#import AnotherModule
class Whatever() {
///Uses CGPoint + CGPoint
}
不幸的是,编译器抛出一个错误:Ambiguous use of operator '+'
并指向两个导入的模块。并非我的应用中的所有类都使用FirstModule
和AnotherModule
,但它们只需要func + ()
如何避免从Whatever
类中的FirstModule
和AnotherModule
导入func + ()
?
1条答案
按热度按时间polhcujo1#
一种可能的方法是显式地从其中一个模块导入您正在使用的所有内容。
您可以显式导入类型别名、结构、类、枚举、协议、全局
let
、var
和函数。示例:
请注意,您不能显式导入扩展名或操作符。如果您需要
FirstModule
中的扩展名或操作符(不是CGPoint.+
),我建议您将它们移到另一个只有import FirstModule
的文件中。(不用说,您应该用您正在使用 * 更少 * 成员的模块替换
FirstModule
)