标签: do-catch

对于不抛出的方法的Swift错误处理

如何处理未明确抛出的方法或代码的错误?

将其包装为do/catch块会导致编译器警告:

"'catch' block is unreachable because no errors are thrown in 'do' block"
Run Code Online (Sandbox Code Playgroud)

来自C#/ JAVA背景,至少可以说这是一个奇怪的事.作为开发人员,我应该能够在do/catch块中保护和包装任何代码块.仅仅因为方法未明确标记为"throw"并不意味着不会发生错误.

error-handling swift do-catch

17
推荐指数
4
解决办法
7125
查看次数

嵌套做抓住swift 3.0

我想使用连续的try语句.如果有人返回错误,我想继续下一个,否则返回值.下面的代码似乎工作正常,但我最终会得到一个大的嵌套do catch金字塔.在Swift 3.0中有更聪明/更好的方法吗?

do {
    return try firstThing()
} catch {
    do {
        return try secondThing()
    } catch {
        return try thirdThing()
    }
}
Run Code Online (Sandbox Code Playgroud)

error-handling swift do-catch

8
推荐指数
2
解决办法
1362
查看次数

URLSession.shared.datatask的错误处理

我有一个查询API的函数,然后根据结果填充对象数组(参见下面的代码).从检索到的JSON中我可以使用guard语句来捕获任何错误,这意味着如果数据丢失则会被捕获,但是如果URL不正确或者函数无法连接到URL,则会导致应用程序崩溃

let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
Run Code Online (Sandbox Code Playgroud)

并给出以下错误消息

2018-01-27 23:11:28.759466+0000 myPregnancy[6321:224887] TIC Read Status [1:0x6040001729c0]: 1:57
2018-01-27 23:11:28.759940+0000 myPregnancy[6321:224887] Task <05716AF1-B1E0-4EB8-ADC7-138C026C58AC>.<1> HTTP load failed (error code: -1005 [4:-4])
2018-01-27 23:11:28.760813+0000 myPregnancy[6321:224886] Task <05716AF1-B1E0-4EB8-ADC7-138C026C58AC>.<1> finished with error - code: -1005
Run Code Online (Sandbox Code Playgroud)

如何使用guard来捕获此错误并返回类似于我处理丢失数据的错误消息?

func loadMedication(){
    print("Getting medication")
    self.medication.removeAll()
    let myUrl = URL(string: "URL HIDDEN");
    var request = URLRequest(url:myUrl!)
    request.httpMethod = "POST"// Compose a query string
    let postString = "userToken=" + User.user.getUserId();
    request.httpBody = postString.data(using: String.Encoding.utf8);
    let …
Run Code Online (Sandbox Code Playgroud)

error-handling try-catch swift do-catch xcode9

7
推荐指数
0
解决办法
1370
查看次数

NSError 和 Swift 中的错误

我已经看到已经有一个关于 Swift和Swift 之间差异的问题,我知道这些差异。但是,我不理解下面代码片段的行为,因为它编译正确。Swift 的错误处理机制要求每个未出现在带有 throws 子句的函数中的 do-catch 块都包含一个通用处理程序(要么不包含任何其他内容,要么包含一个for Error)。然而,使用似乎具有相同的效果。这里有人知道原因吗?我在另一个问题中读到“任何符合 ErrorType 的类都可以转换为 NSError。这些功能在文档中进行了描述。”。然而,该答案指出的文档并没有向我澄清这一点,因为它重点关注我没有使用的 Objective-C。NSErrorErrorcatchcatchNSError

import Foundation
extension Int : Error {}
extension String : Error {}

func fErr() throws {
  let a = Int(readLine()!)!
  if a > 20 {
    throw 42
  } else {
    throw "An error occurred"
  }
}

func gErr() {
  do {
    try fErr()
  } catch let e as NSError {
    print(e)
  }
}
Run Code Online (Sandbox Code Playgroud)

error-handling nserror swift do-catch

5
推荐指数
2
解决办法
4820
查看次数

如何避免在Swift2中嵌套do/catch语句

我一直想这样做:

do {
    let result = try getAThing()
} catch {
   //error
}

do {
    let anotherResult = try getAnotherThing(result) //Error - result out of scope
} catch {
    //error
}
Run Code Online (Sandbox Code Playgroud)

但似乎只能做到这一点:

do {
     let result = try getAThing()
     do {
          let anotherResult = try getAnotherThing(result) 
     } catch {
          //error
     }
} catch {
     //error
}
Run Code Online (Sandbox Code Playgroud)

有没有办法result在不必嵌套do/catch块的情况下保持不可变的范围?有没有办法防止错误类似于我们如何使用guard语句作为if/else块的反转?

swift2 do-catch

4
推荐指数
1
解决办法
408
查看次数

从do-catch语句返回字符串

我试图将代码从swift 2转换为swift 4,并遇到此错误

从这里抛出的错误不予处理

所以我这样做了,但是现在它告诉我返回一个字符串。任何想法如何做到这一点?

func formatSentence(sentence:String) -> String
{
    do {
        let regex = try NSRegularExpression(pattern: "\\W+", options: .caseInsensitive)
        let modifiedString = regex.stringByReplacingMatches(in: sentence, options: [], range: NSRange(location: 0,length: sentence.count), withTemplate: "")

    } catch {
        print(error)
    }

    //I tried adding it here the return modifiedString but gives me error
}
Run Code Online (Sandbox Code Playgroud)

这就是原始功能的样子

func formatSentence(sentence:String) -> String
{
    let regex = NSRegularExpression(pattern: "\\W+", options: .caseInsensitive)//NSRegularExpression(pattern:"\\W+", options: .CaseInsensitive, error: nil)
    let modifiedString = regex.stringByReplacingMatches(in: sentence, options: [], range: NSRange(location: 0,length: sentence.count), withTemplate: …
Run Code Online (Sandbox Code Playgroud)

swift do-catch

2
推荐指数
1
解决办法
1622
查看次数

标签 统计

do-catch ×6

swift ×5

error-handling ×4

nserror ×1

swift2 ×1

try-catch ×1

xcode9 ×1