我正在将一些最初用 Swift2 编写的代码迁移到 Swift4。我已经完成了 Swift3 中间升级,并且在 Xcode9 中遇到了一些错误,这些错误涉及一些用户定义的枚举在其源文件之外使用。
考虑以下部分项目结构......
Project
--EnumDefs
----ExceptionTypes.swift
--UI
----UseExceptions.swift
ExceptionTypes.swift
enum MyError : Error {
case err1
case err2
}
...
UseExceptions.swift
...
do {
...
} catch MyError.err1(let e) {
print("\(e)")
} catch let e {
print("\(e)")
}
...
我也尝试过我在网上看到的变体语法
catch let e as MyError.err1 {
仍然没有运气,我看到编译器错误:
Enum element 'err1' is not a member type of 'MyError'
我试图定义 MyError 范围,public
但它不起作用。我有一种感觉,我可能错过了导入或其他东西。我不确定这是否重要,但Autocomplete
在 Xcode 中的 UseExceptions.swift 文件在我开始输入时确实可以识别MyError.
如上所示,在同级目录中的 swift 文件之间使用定义有什么特别之处吗?或者 Swift 4 处理异常处理的方式还有其他问题吗?