ベルマークのない自由帳

ベルマークのない自由帳

有益と無益の境界例

Swiftのきほん -if文とswitch文-

ifswitchを使えば条件分岐、for-inwhilerepeat-whileを使えばループ処理ができる。 処理を記述する部分は「{ }(中括弧)」で囲う。

let memberScore = [5, 7, 3, 9]
var teamScore = 0

for score in memberScore {
    if score > 5 {
        teamScore += 2
    } else {
        teamScore += 1
    }
}

print(teamScore)
    -> 6

if文

ifの条件式は常に論理式

暗黙的に0と比較しようとif 変数 {…}と書くとエラーになる。

var hogeScore = 100
if hogeScore {
    print("Not safety")
}
    -> error: 'Int' is not convertible to 'Bool'

ifとletでオプショナル型の表現(Optional Binding)

オプショナル型の変数は「値が含まれている」、「nil」のどちらもいける両刀使い。 オプショナル型の変数を宣言するには型の後ろに「?」をつける。

var optionalString: String? = "I'm opptional!"
print(optionalString == nil)
    ->false

ifとlet(varでも可能)を組み合わせることで変数に値があるか、欠けている(nil)かで条件分岐。 オプショナル型変数に値が含まれていればアンラップされた値が変数に代入され、変数がnilならfalseとなって処理はスキップされる。

変数に値がある場合

var userName: String? = "Sota"
var greeting = "Hello!"

if let name = userName {
    greeting = "Hello, \(name)"
}

print(greeting)
    -> Hello, Sota

変数に値がない(nil)場合

var userName: String?
var greeting = "Hello!"

if let name = userName {
    greeting = "Hello, \(name)"
}

print(greeting)
    -> Hello!

オプショナル型にデフォルト値を与える

??オペレータを使うことで値がnilの場合のデフォルト値を与えることができる。

var userName: String? = nil
let anonymName: String = "Nanashi"
var greeting = "Hi \(userName ?? anonymName)"

print(greeting)
    -> Hi Nanashi

Switch文

Switchはあらゆる値、比較演算に対応している。 defaultケースを設定しないと「網羅的でない」としてエラーになる。 where句を使いlet 変数 where 条件式 (var 変数でもok)とすることで、特定の条件を指定して処理を行うことも可能。 (.hasSuffix()メソッドは、引数の文字列が変数内の文字列の「末尾」に含まれていればTrueを返す)

import Foundation //.hasSuffixのためにインポート

var userJob = "Unemployed"
switch userJob {
    case "Office Worker":
        print("Soso")
    case "Entreprenuer", "Investor": //カンマ区切りでor
        print("Money Happy Pesron")
    case let x where x.hasSuffix("employed”):
        print("Are you Unemployed?")
    default:
        print("Enter your Job!")
}
    -> "Are you Unemployed?"