Ios 如何在Swift 2.0中获取错误消息?
我在Swift 1.2:Ios 如何在Swift 2.0中获取错误消息?,ios,swift,error-handling,try-catch,swift2,Ios,Swift,Error Handling,Try Catch,Swift2,我在Swift 1.2:NSURLConnection.sendSynchronousRequest(:::\u:\ uuuu)中经常使用这种方法,但在iOS9中显然不推荐使用这种方法。但是它仍然可以工作,但是现在它使用了新的Swift 2.0错误处理,我不知道如果它失败,我将如何获得错误消息,例如,如果时间用完 我知道我必须把它放到一个do catch中,然后在metro之前说try,但我不知道如何捕捉错误消息 do { let data = try NSURLConnection.s
NSURLConnection.sendSynchronousRequest(:::\u:\ uuuu)
中经常使用这种方法,但在iOS9中显然不推荐使用这种方法。但是它仍然可以工作,但是现在它使用了新的Swift 2.0错误处理,我不知道如果它失败,我将如何获得错误消息,例如,如果时间用完
我知道我必须把它放到一个do catch中,然后在metro之前说try,但我不知道如何捕捉错误消息
do {
let data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: nil)
return data
}
catch _ {
return nil
}
之前我使用了NSError,然后使用了它的description属性,但现在我没有任何线索。使用automatic
error
变量,如果愿意,您可以将其强制转换为NSError
:
catch {
let nsError = error as NSError
print(nsError.localizedDescription)
}
您现在可以抛出继承
ErrorType
的任何对象,并在catch
语句中提供自定义处理。您还可以将错误强制转换为NSError
以访问localizedDescription
以处理第三方错误
强制转换枚举ErrorType
将生成NSError
,其中domain
等于枚举名称,code
等于枚举值,以及自动生成的localizedDescription
,格式如下:
无法完成该操作。(域错误代码。)
例如,以下代码:
enum AwfulError: ErrorType {
case Bad
case Worse
case Terrible
}
func throwingFunction() throws {
throw AwfulError.Worse
}
do {
try throwingFunction()
}
catch AwfulError.Bad {
print("Bad error")
}
catch let error as NSError {
print(error.localizedDescription)
}
将打印
无法完成该操作。(错误1。)
尽管问题标题指定了Swift 2,但此答案适用于Swift 3 正如@redent84所指出的,由于Swift 2,错误对象可能是自制的。下面是我编写的一个方法,用于分析和打印“catch”语句中的默认错误对象,该语句不指定任何特定的错误类型:
// Method to print an unknown Error type object to the system output.
static func printCaughtError(_ unknownError : Error) {
let objectDescription = String(describing: unknownError)
let localizedDescription = unknownError.localizedDescription
if localizedDescription != "" {
if localizedDescription.contains(objectDescription) {
print(localizedDescription)
return
}
if !objectDescription.contains(localizedDescription) {
print(objectDescription + ": " + localizedDescription)
return
}
}
print(objectDescription)
}
然后你可以这样称呼它:
catch {
printCaughtError(error)
}
@redent84:任何错误类型都会自动桥接到NSError,这在“使用Swift与Cocoa和Objective-C”一书中有记录。或者简单地
catch let error as NSError{…}
as in(例如)。谢谢,我没有看到任何信息表明错误是这样传递的,我只发现了几个捕获了特定错误,或者根本没有。我可以在3分钟内接受您将获得一些标准的localizedDescription
仅用于SwiftErrorType
。对于任何Error
现在都有默认的localizedDescription
(请参见链接)。但是,从我的测试来看,它似乎对我们来说只是let nsError=error as nsError
。