🎱
【DAY8】100 Days of SwiftUI -default values, throwing functions
はじめに
iOSアプリ界隈で(たぶん)有名なPaul Hudsonさんが無料で公開しているSwiftUIの100日学習コースを進めてみます。学習記録及び備忘録がてらにつらつらと書いてみます。
100 Days of SwiftUI
学んだこと
序盤はSwiftUIは関係なくSwiftという言語の言語仕様のお話。気になった点だけピックアップ。
関数にデフォルト値を設定する
以下のように関数にデフォルト値を設定した場合、引数を省略できる。
func printTimesTables(for number: Int, end: Int = 12) {
for i in 1...end {
print("\(i) x \(number) is \(i * number)")
}
}
printTimesTables(for: 5, end: 20)
printTimesTables(for: 8)
エラーハンドリング
Swiftでは以下の3ステップでエラーハンドリングを行う。他にも方法はあるが型通りなのは以下と思われる。ただし、Swiftではthrow関数を設定した関数を呼び出す場合直前にtryを置かなければならずややこしいため初学者はthrow関数を使わない方がよいとの考えが記載されていた。
- 起こりうるエラーを列挙する
- エラーが発生した場合にフラグを立てる関数を作る
- その関数を呼び出し、起こりうるエラーを処理する
例えばパスワードの強度を判定する処理を考える。パスワードが短い場合(5桁未満)や緩すぎる場合にエラーを返す設定。
1. 起こりうるエラーを列挙する
enum PasswordError: Error {
case short, obvious
}
2. エラーが発生した場合にフラグを立てる関数を作る
関数の定義時にthrowsを入れ、処理の中にthrowを書くことでエラー発生時のフラグを作成している。下記の例で言うと、パスワードが短い場合のエラーフラグをthrow PasswordError.shortで作成している。また、関数はthrowが実行された時点で終了する。
func checkPassword(_ password: String) throws -> String {
if password.count < 5 {
throw PasswordError.short
}
if password == "12345" {
throw PasswordError.obvious
}
if password.count < 8 {
return "OK"
} else if password.count < 10 {
return "Good"
} else {
return "Excellent"
}
}
3.その関数を呼び出し、起こりうるエラーを処理する
try-catchで処理。
let string = "12345"
do {
let result = try checkPassword(string)
print("Password rating: \(result)")
} catch PasswordError.short {
print("Please use a longer password.")
} catch PasswordError.obvious {
print("I have the same combination on my luggage!.")
} catch {
print("There was an error.")
}
// 出力: Please use a longer password.
Discussion