“方法”对于此上下文中的类型查找不明确,Alamofire 中的错误

问题描述 投票:0回答:12

我正在使用 Alamofire 快速进行网络处理,但遇到了一个奇怪的错误。看来我们无法传递 方法 枚举作为参数。
[方法参数出现错误]

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)
        }
    }
}
swift alamofire
12个回答
132
投票

您必须指定从中查找对象类型的模块。 致电

Alamofire.Method


18
投票

可能存在名称冲突。要解决这个问题,您可以使用

enum
的限定名称(包括模块名称):

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

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.
前缀。


1
投票

虽然这个答案确实修复了构建错误;就我而言,显示警告的文件位于两个不同的框架中,因此 Xcode 不知道在哪里查找。这不是我们内部框架的预期行为,因此我只是删除了我不再需要的副本。


1
投票

您可以在应用程序的两个或多个位置声明一个类。该错误表明没有确定的方法来使用此类,因为声明它的代码中有几个不同的位置。


1
投票

Swift 4 和 Alamofire 4.7

HTTPMethod
替换为
Alamofire.HTTPMethod


1
投票

我收到此错误,因为我的数据库表名称和模型类名称相同...通过重命名模型类名称解决了问题。


1
投票

我通过手动删除 pods 项目中的 Alamofire 文件夹成功解决了该问题。然后,我执行“pod install”来重新安装丢失的 pod。

执行此操作后,Alamofire 文件夹中的文件明显减少。


0
投票

将枚举类型名称更改为不同的 &...

  • 使用
    $(inherited)
    标志,或
  • 从目标中删除构建设置。

目标->构建设置->ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES,值类型为Boolean,点击其他,将值改为$(inherited) 执行-pod更新 完成

然后尝试运行您的项目,错误就会消失! (我在我的项目中尝试过)

枚举 'XYZ'ButtonType {

}


0
投票

我之所以这样做是因为我的核心数据模型(xcdatamodel)中的一个 NSManagedObject 实体的

Codegen
值为
Class definition
并且我还手动生成/创建 NSManagedObject 代码。所以最终该实体有两个重复的定义。

© www.soinside.com 2019 - 2024. All rights reserved.