Swift
- functions with throw Exceptions
import Cocoa enum PasswordError: Error, LocalizedError { case TooShort case Obvious var errorDescription: String? { switch self { case .TooShort: return NSLocalizedString("Password is too short", comment: "Too short") case .Obvious: return NSLocalizedString("Password is too obvious", comment: "Obvious") } }
} // although defined with `throws`,
// this function doesn't have to throw an exception
func checkPassword(_ pwd: String) throws -> Bool { if pwd.count < 6 { throw PasswordError.TooShort } if pwd == "123456" { throw PasswordError.Obvious } return true
} do { let ok = try checkPassword("hello") print(ok)
} catch { print("Error happened: \(error.localizedDescription)")
} // ## Checkpoints /* write a function that accepts an integer from 1 through 10,000, and returns the integer square root of that number. That sounds easy, but there are some catches: You can’t use Swift’s built-in sqrt() function or similar – you need to find the square root yourself. If the number is less than 1 or greater than 10,000 you should throw an “out of bounds” error. You should only consider integer square roots – don’t worry about the square root of 3 being 1.732, for example. If you can’t find the square root, throw a “no root” error. */ enum RootError: Error, LocalizedError { case outOfBounds case noRoot var errorDescription: String? { switch self { case .outOfBounds: return NSLocalizedString("Out of Bounds", comment: "OOB") case .noRoot: return NSLocalizedString("No root", comment: "NR") } }
} func sqroot(_ num: Int) throws -> Int { if num < 1 || num > 10_000 { throw RootError.outOfBounds } for i in 1...100 { if i * i == num { return i } } throw RootError.noRoot
} do { print(try sqroot(9)) print(try sqroot(25)) print(try sqroot(37))
} catch { print("error happened: \(error.localizedDescription)")
}
Discover more from Coursity
Subscribe to get the latest posts sent to your email.