我有两个包:FirstModuleAnotherModule,每个包都定义了

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 '+' AND. 我的应用程序中并不是所有的类都使用FirstModuleAnotherModule,但它们只需要func + ()

如何避免从FirstModule进口func + (),Whatever班进口AnotherModule

推荐答案

要做到这一点,一种可能的方法是显式地从其中一个模块导入您正在使用的所有内容.

您可以显式导入类型别名、 struct 、类、枚举、协议、全局letvar和函数.

示例:

import typealias FirstModule.SomeTypeAlias
import struct FirstModule.SomeStruct
import class FirstModule.SomeClass
import enum FirstModule.SomeEnum
import protocol FirstModule.SomeProtocol
import let FirstModule.someGlobalConstant
import var FirstModule.someGlobalVar
import func FirstModule.someGlobalFunction
import AnotherModule

// now you will use the CGPoint.+ from AnotherModule

请注意,您不能显式导入扩展或运算符.如果您需要FirstModule中的扩展名或运算符(不是CGPoint.+),我建议您将它们移到另一个只有import FirstModule的文件中.

(不用说,您应该将FirstModule替换为您使用fewer成员的模块)

Swift相关问答推荐

如何将趋势线添加到线性图中?

UITableView未显示类数组数据

如何使用Swift宏向 struct 体及其init函数添加新成员?

如何在SWIFT中使用DiscardingTaskGroup获得任务结果

从Firebase播放音频文件不起作用

如何使用模型在 SwiftUI 的列表中进行搜索

如何在设备(或常量)地址空间中创建缓冲区?

如何制作进度加载动画?

如何打印出此 struct 中的数据?

使用 Async-Await 和 Vapor-Fluent 创建 CRUD 函数 - Swift 5.6

如何在 UITableView 中点击图片和标题

在 macOS (Swift) 上获取 BSD 驱动器名称的最佳方法是什么?

如何在 Swift 中对单个单词进行词形还原

如何在 ZStack 中单独下移卡片?

符合协议 - 错误?

RxSwift:share() 替代方案,保证upstream 的单一订阅

在 xcode8 中找不到 ModuleName-Swift.h 文件

应用程序包不包含有效标识符

将 UIImage 剪成圆形

如何将应用程序与 iOS 联系人应用程序集成?