【问题标题】:try catch not working in swift尝试 catch 不能快速工作
【发布时间】:2015-12-03 07:52:12
【问题描述】:

这应该简单明了,但尝试在 swift2 中捕获让我感到沮丧。这是我的代码。

@IBAction func btnAdd_TouchDown(sender: AnyObject) {

        do  { try AddNewNotesToList() } catch{

            if(Ex.UnknownError != "")
            {
                Error(Ex.UnknownError)
            }
        }
    }



func AddNewNotesToList() throws
    {
        var obj: TreatmentNotesDTO = TreatmentNotesDTO()
        obj.therapist_id = Int(TherapistId)! // getting error here
        return
    }

错误:

致命错误:在展开可选值时意外发现 nil

调试器应该去赶上,但它分手了。我来自 c#,刚开始使用 swift2。任何帮助

【问题讨论】:

  • 要捕获错误,目标函数必须抛出一个错误。阅读语言指南中的“错误处理”一章:developer.apple.com/library/ios/documentation/Swift/Conceptual/…
  • 没有正确获取您,您可以显示任何代码吗?
  • 我在函数中添加了throws,但仍然无法正常工作。我不想手动定义错误。 Swift 应该会自动选择错误,例如 c#、javascript 等 lang。
  • 在 Swift 中,您必须在使用 try - catch 时定义错误。使用可选绑定检查 Int 初始化程序的结果可能更容易,如 Qbyte 的答案中所述
  • 是的,现在知道了,但这似乎很烦人,如果我在 AddNewNotesToList 中有 100 个“变量”,那么我需要为所有 100 个 variable 创建抛出函数。一定有什么捷径

标签: xcode swift2


【解决方案1】:

我建议您使用guard 来捕获此类错误:

guard let therapistID = Int(TherapistId) else {
    print(TherapistId + " cannot be converted to an Int")
    return
    // or mark function as throws and return an error
    throw NSError(domain: TherapistId + " cannot be converted to an Int", code: 0, userInfo: nil)
}
obj.therapist_id = therapistID

请注意,Int(TherapistId)! 不会与 throws 一起引发错误。它是一个fatal error,它会停止程序执行。

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 2016-03-21
    • 2014-10-22
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多