所以我创建了一个新的Xcode项目,并写了这个Podfile
:
use_frameworks!
target 'Repro' do
pod 'Alamofire'
pod 'Result'
end
然后我运行了pod install
,打开了工作区,并创建了一个包含以下内容的新文件:
import Alamofire
import Result
private func something(request: Request) -> Result<Bool, NSError> {
fatalError()
}
我尝试构建它,但Xcode产生了错误'Result' is ambiguous for type lookup in this context
。所以我尝试了明显的修复:
import Alamofire
import Result
private func something(request: Request) -> Result.Result<Bool, NSError> {
fatalError()
}
但是这给了我错误Reference to generic type 'Result' requires arguments in <...>
,好像Swift正在将模块名称解析为类型名称。
什么是非明显的修复?
答案 0 :(得分:10)
如果您直接导入结果模块的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
我在看到detailed import mentioned in the language reference后通过反复试验找到了这个。我不知道类型名称解析是否记录在任何地方以这种方式工作,所以它可能会在没有太多注意的情况下发生变化。
答案 1 :(得分:-1)
我建议使用swift 2.1来Result cocoapod 超出风格,并且可以通过语言更新来避免 - 他们应该做更像
的事情private func something(request: Request) throws -> Result {
// TODO: implement this
throw RequestError()
}
,无需包含返回值。
我会在第一个地方(Bool, NSError)
使用元组而不是自定义枚举。但那是风格。