【问题标题】:'Method' is ambiguous for type lookup in this context, Error in Alamofire在这种情况下,“方法”对于类型查找不明确,Alamofire 中的错误
【发布时间】:2016-02-06 05:32:33
【问题描述】:

我正在使用 Alamofire 快速进行网络处理,但遇到了一个奇怪的错误。似乎我们无法将 方法 枚举作为参数传递。
[Error is on Method parameter]

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)
        }
    }
}

【问题讨论】:

  • 使用限定名,例如Alamofire.Method 如果有名称冲突。您已经在为request 函数这样做了。

标签: swift alamofire


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    可能存在名称冲突。解决方法可以使用enum的限定名(包括模块名):

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

    【讨论】:

      【解决方案3】:

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

      protocol SomeProtocol {
         static func someTypeMethod()
      }
      
      protocol SomeProtocol {
         init(someParameter: Int)
      }
      
      protocol SomeProtocol {
         var mustBeSettable: Int { get set }
         var doesNotNeedToBeSettable: Int { get }
      }
      

      【讨论】:

        【解决方案4】:

        在使用“Moya”和桥接c框架时出现此错误冲突,通过隐式添加Moya.Method模块修复它。

        var method: Moya.Method  {
            switch self {
               case .login: return .post
               case .register: return .post
            }
        }
        

        【讨论】:

          【解决方案5】:

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

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

          typealias Method = Alamofire.Method
          

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

          【讨论】:

          • 除非需要同时使用两个框架,否则这应该是公认的答案。
          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            您可能在应用程序的两个或多个位置声明了一个类。错误是说没有确定的方法来使用这个类,因为在它声明的代码中有几个不同的地方。

            【讨论】:

              【解决方案8】:

              Swift 4 和 Alamofire 4.7

              HTTPMethod 替换为Alamofire.HTTPMethod

              【讨论】:

                【解决方案9】:

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

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

                Target -> building settings->ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES,Value类型为Boolean,点击其他,将值改为$(inherited) 执行 - pod 更新 完成

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

                枚举 'XYZ'ButtonType {

                }

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    【解决方案11】:

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

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-04-06
                      • 1970-01-01
                      相关资源
                      最近更新 更多