私はHillegassの本、第5版、第10章、RaiseManの例を見ています。もちろん、Xcodeの8.1、スウィフト3.0.1では動作しませんSwift 3でraiseKEY検証機能をスローするための形式は何ですか?
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 //}
:
彼は、このスウィフト2のコードを示します。だから、私が試した:
`
列挙EmployeeError:エラー{ 場合badRaise
}
validateRaise(raiseNumberPointer:AutoreleasingUnsafeMutablePointer)はfuncをスロー{
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月2日07:46:31.163900 RaiseMan [19240:1489479] [一般]キャッチされない例外が
を上げました2016-11- 02 07:46:31.163986 RaiseMan [19240:1489479] [全般] [setNilValueForKey]:キーを上げるための値としてnilを設定できませんでした。
`` `
誰かが右の構文を知っていれば、それは非常に参考になります。ありがとう。