我无法以任何方式处理,程序一直崩溃。我附上我需要的例子!该解决方案不应包含具有 THROWS 的功能。 谢谢!
没有枚举!!!像Java一样简单!
// Array have two items and first item have Int
// I need handle error in try / catch block
//
// WITHOUT OF FUNCTIONS!!!!!!!!!!!!!!!!!!!!
//
var list = [[100,nil], [nil, nil]]
do {
// OR HERE ERROR
let index_0_value_1 :Int = list[0][0] as! Int
// OR HERE ERROR
let index_0_value_2 :Int = list[0][1] as! Int
// OR HERE ERROR
let index_1_value_1 :Int = list[1][0] as! Int
// OR HERE ERROR
let index_1_value_2 :Int = list[1][1] as! Int
} catch {
// Here ANY Exception
/// ANY ANY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// E X C E P T I O N
// HERE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
答案 0 :(得分:0)
不幸的是,Swift投掷捕捉系统的工作原理有所不同。它根本不是要捕获您的异常,而是使用不返回异常的方法来检索错误。考虑您有这样一种方法:
func generateMyList() -> [MyObject]?
这是一个非常简单的方法,但是假设有可能发生错误。或者更确切地说,我们也希望向开发人员提供错误反馈。为此,我们需要使用一个元组:
func generateMyList() -> (objects: [MyObject]?, error: Error?)
但这非常丑陋。所以我们宁愿有一个掷球接球系统。然后是
func generateMyList() throws -> [MyObject]?
现在,由于方法引发,我们需要在其上使用try
。我们要么走很长的路:
let myItems: [MyObject]?
do {
myItems = try generateMyList()
} catch {
print(error) // we get a thrown error here
}
或简短版本:
let myItems: [MyObject]? = try? generateMyList()
通过这种方式,我们将忽略该错误,只说“做”或返回nil。
这就是swift中do-try-catch要做的所有事情。它不会处理所有异常。或更确切地说,它根本不会处理异常。
对于您的特定情况,没有办法抓住它。您可以有一种便捷的方法
func getInteger(column: Int, row: Int) throws -> Int {
guard list.count > column else { throw NSError(domain: "internal", code: 404, userInfo: ["dev_message": "Column index out of bounds"]) }
guard guard list[column].count > row else { throw NSError(domain: "internal", code: 404, userInfo: ["dev_message": "Row index out of bounds"]) }
guard let integerValue = list[column][row] as? Int else { throw NSError(domain: "internal", code: 404, userInfo: ["dev_message": "Value at given column and row is not an integer"]) }
return integerValue
}
现在您可以拨打电话
do {
// OR HERE ERROR
let index_0_value_1 :Int = try getInteger(column: 0, row: 0)
// OR HERE ERROR
let index_0_value_2 :Int = try getInteger(column: 0, row: 1)
// OR HERE ERROR
let index_1_value_1 :Int = try getInteger(column: 1, row: 0)
// OR HERE ERROR
let index_1_value_2 :Int = try getInteger(column: 1, row: 1)
} catch {
print("Error: \((error as NSError).userInfo["dev_message"] as? String ?? "[Unknown error]")")
}
我希望这可以解决一些问题。让我们知道您是否还有其他问题。