Learn SwiftUI (Day 8/100)

Learn SwiftUI (Day 8/100)

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)")
}
Enter fullscreen mode
Exit fullscreen mode

Discover more from Coursity

Subscribe to get the latest posts sent to your email.

Comments

No comments yet. Why don’t you start the discussion?

    Leave a Reply

    Your email address will not be published. Required fields are marked *