【问题标题】:What is the form for a throwing raiseKEY validation func in Swift 3?Swift 3 中抛出 raiseKEY 验证函数的形式是什么?
【发布时间】:2016-11-02 11:54:09
【问题描述】:

我正在阅读 Hillegass 的书,第 5 版,第 10 章,RaiseMan 示例。

他指出这个 Swift 2 代码:

class Employee: NSObject { var name: String? = "New Employee" var raise: Float = 0.05 } // //func validateRaise(raiseNumberPointer: AutoreleasingUnsafeMutablePointer<NSNumber?>, error outError: NSErrorPointer) -> Bool { //
// let raiseNumber = raiseNumberPointer.pointee // if raiseNumber == nil { // let domain = "UserInputValidationErrorDomain" // let code = 0 // let userInfo = [NSLocalizedDescriptionKey : "An employee's raise must be a number."] // outError?.pointee = NSError(domain: domain, code: code, userInfo: userInfo) // return false // } //
// return true //}

当然,这在 Xcode 8.1、Swift 3.0.1 中不起作用。所以我尝试了:

```

枚举员工错误:错误{ 案例badRaise

}

func validateRaise(raiseNumberPointer: AutoreleasingUnsafeMutablePointer) 抛出 {

let i = 1

do {
    guard let raiseNumber =  try raiseNumberPointer.pointee else {
        throw EmployeeError.badRaise
    }
    let domain = "UserInputValidationErrorDomain"
    let code = 0
    let userInfo = [NSLocalizedDescriptionKey : "An employee's raise must be a number."]
}

}

```

但是设置断点告诉我这段代码永远不会被调用。显然,在 IB 中,我按照指示转到了相应的 NSTextField 并立即检查了验证。这是我得到的错误:

```

2016-11-02 07:46:31.163900 RaiseMan[19240:1489479] [常规] 引发了未捕获的异常

2016-11-02 07:46:31.163986 RaiseMan[19240:1489479] [General] [setNilValueForKey]:无法将 nil 设置为键值提升。

```

如果有人知道正确的语法,那将非常有帮助。谢谢。

【问题讨论】:

    标签: swift3 kvc


    【解决方案1】:

    另一位用户在 Big Nerd Ranch 网站上发现了此内容,并在 Slack 上将其发送给了我。

    https://forums.bignerdranch.com/t/validateraise-function-changes-in-swift-3-exception-is-not-being-handled/9279

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      相关资源
      最近更新 更多