在这个上下文中,类型查找的“Method”不明确,Alamofire出现错误。

75

我在Swift中使用Alamofire进行网络处理时遇到了一个奇怪的错误。 看起来我们无法将 Method 枚举作为参数传递。
[错误出现在Method参数上]

输入图像描述

private func apiRequest(method: Method, url: String, apiData: [String : AnyObject], completion:(finished: Bool, response: AnyObject?) ->Void) {

    Alamofire.request(method, url, parameters: apiData).responseJSON{ response in
        if let JSON = response.result.value {
            completion(finished: true, response: JSON)
        } else {
            completion(finished: false, response:nil)
        }
    }
}

3
如果存在命名冲突,使用限定名称,例如Alamofire.Method。对于request函数,您已经在这样做了。 - Sulthan
11个回答

130

您需要指定查找对象类型的模块。 请调用Alamofire.Method


18

可能存在名称冲突。要解决此问题,您可以使用枚举的限定名称(包括模块名称):

可能有命名冲突。为了解决它,你可以使用enum的限定名称(包括模块名称):

private func apiRequest(method: Alamofire.Method, ...

比较了一下差异,发现我已经导入了RealmSwift(里面充满了名称冲突...真遗憾)。我已经解决了这个问题。 - hulkinggrunt

8

我也遇到了这个问题,因为我声名了多个同名的协议:

protocol SomeProtocol {
   static func someTypeMethod()
}

protocol SomeProtocol {
   init(someParameter: Int)
}

protocol SomeProtocol {
   var mustBeSettable: Int { get set }
   var doesNotNeedToBeSettable: Int { get }
}

7
在使用"Moya"和桥接C语言框架时,遇到了这个错误冲突。通过隐式添加"Moya.Method"模块来修复它。
var method: Moya.Method  {
    switch self {
       case .login: return .post
       case .register: return .post
    }
}

3

类型Method在两个导入的模块中声明。您必须指定要使用该类型的模块。请使用Alamofire.Method而不是Method

提示:如果您经常使用该类型,可以在您的模块(应用程序)中创建一个类型别名:

typealias Method = Alamofire.Method

这样你就不需要再在类型前缀加上Alamofire.了。


除非同时需要使用这两个框架,否则这应该是被接受的答案。 - olx

1
虽然这个答案解决了构建错误的问题;但在我的情况中,显示警告的文件存在于两个不同的框架中,因此Xcode不知道该去哪里查找。这不是我们内部框架的预期行为,所以我只是删除了不再需要的副本。

1

Swift 4 和 Alamofire 4.7

HTTPMethod替换为Alamofire.HTTPMethod


1
您的应用程序中可能会有一个类在两个或更多地方声明。错误提示说明无法确定如何使用该类,因为代码中有几个不同的地方声明了它。

1

我因为数据库表名和模型类名相同而出现了这个错误...通过重命名模型类名解决了问题。


非常好的发现! - Dilip Agheda

1

我成功地通过手动删除pods项目中的Alamofire文件夹来解决了问题。然后,我执行了"pod install"命令以重新安装缺失的pods。

这样做后,Alamofire文件夹中的文件数量显著减少。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接