我正在使用Alamofire在swift中进行网络处理并遇到一个奇怪的错误。好像我们不能将 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)
}
}
}
答案 0 :(得分:76)
您必须指定要从中查找对象类型的模块。
致电Alamofire.Method
答案 1 :(得分:11)
可能存在名称冲突。要解决此问题,您可以使用enum
的限定名称(包括模块名称):
private func apiRequest(method: Alamofire.Method, ...
答案 2 :(得分:6)
我也遇到过这个问题,因为我已声明了许多相同的协议名称:
protocol SomeProtocol {
static func someTypeMethod()
}
protocol SomeProtocol {
init(someParameter: Int)
}
protocol SomeProtocol {
var mustBeSettable: Int { get set }
var doesNotNeedToBeSettable: Int { get }
}
答案 3 :(得分:2)
在使用“ Moya”并桥接c框架时,发生了此错误冲突,请通过隐式添加Moya.Method
模块来解决此问题。
var method: Moya.Method {
switch self {
case .login: return .post
case .register: return .post
}
}
答案 4 :(得分:1)
您可以在应用程序的两个或多个位置声明一个类。错误是说没有确定的方法来使用这个类,因为它声明的代码中有几个不同的位置。
答案 5 :(得分:1)
Swift 4和Alamofire 4.7
将HTTPMethod
替换为Alamofire.HTTPMethod
答案 6 :(得分:0)
虽然答案确实解决了构建错误;在我的例子中,显示警告的文件位于两个不同的框架中,因此Xcode不知道在哪里查看。这不是我们内部框架的预期行为,所以我只是删除了我不再想要的副本。
答案 7 :(得分:0)
类型Method
在两个导入的模块中声明。您必须指定要使用该类型的模块。使用Alamofire.Method
代替Method
。
提示:如果您经常使用该类型,则可以在模块(应用程序)中创建类型别名:
typealias Method = Alamofire.Method
这样您就不需要再为Alamofire.
添加类型前缀。
答案 8 :(得分:0)
将枚举类型名称更改为其他&...
$(inherited)
标志,或目标->建筑物设置-> ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES,值类型为布尔值,单击另一个,将值更改为$(继承) 执行-吊舱更新 完成
然后尝试运行您的项目,错误将消失! (我已经在我的项目中尝试过)
枚举'XYZ'ButtonType {
}
答案 9 :(得分:0)
出现此错误是因为我的数据库表名称和模型类名称相同...问题是通过重命名模型类名称来解决的。
答案 10 :(得分:0)
我设法通过手动删除pods项目中的Alamofire文件夹来解决此问题。然后,我执行“ pod安装”以重新安装缺少的pod。
执行此操作后,Alamofire文件夹中的文件数量明显减少。