【问题标题】:can not pass Enum type as parameter type of function不能将枚举类型作为函数的参数类型传递
【发布时间】:2016-05-12 17:58:23
【问题描述】:

我是 iOS Swift 2 的新手。

我定义了一个简单的函数:

// ERROR: 'Method' is ambiguous for type lookup in this context
func sendRequest(method: Method, resource: String) -> NSDictionary {
     Alamofire.request(method, "https://httpbin.org/get")
}

如您所见,我定义了第一个参数的类型为Method,由Alamofire 使用。我查看了Method,它是一个Enum,定义如下:

public enum Method: String {
    case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT
}

为什么我不能使用枚举类型作为函数的参数类型?

(我想这样做的原因是我不想传递String类型并检查String是否为例如'get'然后使用.GET,所以我想直接传递Method函数的枚举值。)

==== 更新 ====

Method 来自Alamofire 库,我无法更改任何内容。看起来这是一个名称冲突。但是如何摆脱这个问题呢?

【问题讨论】:

  • 可能与另一个名为 Method 的类型发生名称冲突。更改枚举名称或在其前面加上模块名称 (Appname.Method)
  • 我更新了我的帖子。 Method 来自 Alamofire 库。
  • 在你的函数中使用Alamofire.Method作为类型名称
  • @dan,谢谢。它确实有效。请你回答一下。

标签: ios enums swift2


【解决方案1】:

那里的编译器看到不止一种名为MethodAlamofire.MethodObjectiveC.Method)的类型,并且不知道你想为你的函数使用哪一个。

你必须在类型名称前加上模块名称来告诉它使用哪一个:

func sendRequest(method: Alamofire.Method, resource: String) -> NSDictionary {
     Alamofire.request(method, "https://httpbin.org/get")
}

【讨论】:

    【解决方案2】:

    Method 与同名的运行时类型有歧义。我建议选择一个不与现有类型冲突的不同类型名称。

    【讨论】:

    • 我更新了我的帖子。 Method 来自 Alamofire 库,我无法更改任何内容。如何摆脱这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2023-03-28
    相关资源
    最近更新 更多