如何在Swift中解决这种模糊的类型错误?

Ian*_*nry 4 ios swift

所以我创建了一个新的Xcode项目,并写了这个Podfile:

use_frameworks!

target 'Repro' do
  pod 'Alamofire'
  pod 'Result'
end
Run Code Online (Sandbox Code Playgroud)

然后我跑了pod install,打开了工作区,并创建了一个包含以下内容的新文件:

import Alamofire
import Result

private func something(request: Request) -> Result<Bool, NSError> {
    fatalError()
}
Run Code Online (Sandbox Code Playgroud)

我尝试构建这个,但Xcode产生了错误'Result' is ambiguous for type lookup in this context.所以我尝试了明显的修复:

import Alamofire
import Result

private func something(request: Request) -> Result.Result<Bool, NSError> {
    fatalError()
}
Run Code Online (Sandbox Code Playgroud)

但这给了我错误Reference to generic type 'Result' requires arguments in <...>,好像Swift正在将模块名称解析为类型名称.

什么是非明显的修复?

nol*_*anw 11

如果您直接导入结果模块的Result类型,它将覆盖Alamofire的Result类型.您仍然可以使用其合格的名称访问Alamofire:

import Alamofire
import enum Result.Result

let a: Alamofire.Result<T, ErrorType> // Alamofire's Result
let r: Result<T, ErrorType> // Result module's Result
Run Code Online (Sandbox Code Playgroud)

在看到语言参考中提到的详细导入后,我通过反复试验找到了这个.我不知道类型名称解析是否记录在任何地方以这种方式工作,所以它可能会在没有太多通知的情况下改变.