
Swiftで重要な構文を何例かまとめます。
for/switch/while/辞書
for文は繰り返し処理で使われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
①1から100までの整数全ての合計 var sum = 0 for n in 1...100 { sum = sum + n } print(sum) //5050 【考え方】 1.1から100までの繰り返しの足し算があるからfor分使うな。 2.合計の値を入れる変数が必要だな。var = sumを用意。 3.変数sumにどんどん足していけばいいからsumには「0」を代入しとこう。 var sum = 0 ②九九1の段から9の段を全て出力 for x in 1...9 { for n in 1...9 { print (x * n) } } //1〜81 【考え方】 1.1~9の繰り返しが2回(2通り)あるな。for文の入れ子。 2.xとnのかけ算を繰り返せばいいな。(x * n) ③バッテリー残量が10%以下と20%以下で異なるメッセージを出力する(現在は11%) var battery = 11 if battery <= 10 { print("バッテリー残量は残り10%以下です。") } else if battery <= 20 { print("バッテリー残量は残り20%以下です。") } //バッテリー残量は残り20%以下です。 【考え方】 1.現在の残バッテリーを変数で定義する。var battery = 11 2.残バッテリーの値によって違う出力メッセージを表示。ifとelse if 3.10%以下の時に20%以下10%以上のメッセ出したくないから10%メッセを先に書く ➃九九の偶数段のみ出力したい for x in 1...9 { if x % 2 == 0 { for n in 1...9 { print (x * n) } } } //2〜72 【考え方】 1.繰り返しが2回ある(1...9),(2,4,6,8)からfor文の入れ子。 2.「偶数のみ」という条件があるからif文 3.xとn掛けて出力。 ⑤<strong class="p_line">処理の分岐が多い場合</strong>にif文よりも簡単に<strong class="p_line">シンプルに書けるswitch文</strong>の例(定数countryが"Australia"の時の公用語を出力。"France"、"Australia", "Canada", "HK"、defaultは不明) let country = "Australia" switch country { case "France": print("公用語はフランス語です。") case "Australia", "Canada", "HK": print("公用語は英語です。") default: print("不明。") } //公用語は英語です。 ⑥<strong class="p_line">条件がfalseになるまで繰り返すwhile文</strong>の例(iが5の時、iに1を足しを9まで出力し続ける) var i = 5 while i < 10 { print(i) i += 1 } //5〜9 ⑦3教科のテストの得点(95,70,80)の合計を、配列とfor文で出力 var total = 0 let scores = [95,70,80] for score in scores { total = total + score } print(total) //245 ⑧スリーサイズが(90,58, 80)のプロフィールで3つのサイズを、 (<strong class="p_line">添字に整数以外の型を指定できる配列である</strong>)<span style="color: #ff0000;"><strong>辞書</strong></span>を使って出力したあと、 ウェストを60に修正してまた出力。最後にヒップを削除し出力。 var threeSize = ["bust":90, "waist":58, "hip":80] print(threeSize) //["bust": 90, "waist": 58, "hip": 80] threeSize["waist"] = 60 print(threeSize) //["bust": 90, "waist": 60, "hip": 80] threeSize ["hip"] = nil print(threeSize) //["bust": 90, "waist": 60] |
関数/クラス/プロパティ/メソッド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
①任意の九九の段を出力できる関数を作り、7の段を出力 func kuku(dan:Int) { for n in 1...9 { print(dan * n) } } kuku(dan: 7) ②三角形(底辺5,高さ8)の面積を計算して結果を戻り値で返す func areaOfTriangle(withBase base:Int, height:Int) -> Int{ let result = base * height / 2 return result } var area = areaOfTriangle(withBase: 5, height: 8) print(area) //20 *ラベルに「_」を指定すると呼び出し時のラベルを省略できる。 func areaOfTriangle(_ base:Int, _ height:Int) -> Int{ let result = base * height / 2 return result } var area = areaOfTriangle(5, 8) print(area) //20 ③クラス・プロパティ・メソッドを宣言し、インスタンスの生成、プロパティの設定、メソッドの実行の例 class Taiyaki { //【クラスの宣言】 class クラス名 {} var gu = "クリーム" //【プロパティの宣言】 class クラス名 {var プロパティ名 = 値} func sayGu() { //【メソッドの宣言】 class クラス名 {func メソッド名(){}} print("具は" + gu + "です。") } } var taiyaki = Taiyaki() //【Taiyakiクラスのインスタンスの生成】 var 変数名 = クラス名() taiyaki.gu = "チョコ" //【プロパティの設定】 変数名.プロパティ名 = 値 taiyaki.sayGu() //【メソッドの実行】 変数名.メソッド名() //出力:具はチョコです。 あ |
用語まとめ
fa-chevron-circle-rightプロパティ
インスタンスの中の、プログラマがカスタマイズできる部分。たい焼きがインスタンスであれば、具材や値段がプロパティ。
(クラス宣言の{}の中にある変数=プロパティ)
fa-chevron-circle-rightメソッド
自身のプロパティを操作するための命令。
(クラス宣言の{}の中にある関数=メソッド)
fa-chevron-circle-right継承
そのクラスに親クラスを指定すると、子クラスは親クラスのプロパティやメソッドを引き継ぐことが出来る。
fa-chevron-circle-rightオーバーライド
親クラスで宣言されているプロパティやメソッドを子クラスで上書きする機能。
override func メソッド名() { }
fa-chevron-circle-rightsuper
親クラスのメソッドの一部を上書きしたい時に使う。(親クラスの実装を呼び出せる)
super.メソッド名()
で親クラスのメソッドを実行できる。
fa-chevron-circle-rightnil
何もないことを表す特別な値。
var age:Int? = nil
nilを変数に代入するには、型を明示した上で「?」をつける必要があります。
「Int?」はオプショナル整数型と呼ばれ、「nilを取りうる整数型」を意味します。
1 2 3 |
var age:Int? = 20 print(age + 5) //エラー |
オプショナル整数型と整数型は型が違うからエラー。この問題を解決するには、「オプショナル整数型の変数から整数型の値のみを取り出す」
1 2 3 |
var age:Int? = 20 print(age! + 5) //25 |
このように変数の後ろに「!」をつけると整数型の値のみを取り出すことができ、エラーでなくなる。「!」をつけることで「変数にnilは含まれていないので、エラー吐かないで!」という命令になるということ。
そのため、age = nilの時に「!」を付けるとアプリはクラッシュする。
毎回「!」付けるのめんどくさい!
省略することができます。
1 2 3 |
var age:Int! = 20 print(age + 5) //25 |
「?」の代わりに「!」をつければprint時のageの「!」を省略できます。
fa-chevron-circle-rightイニシャライザ
クラスの初期設定(=自身のプロパティに初期値を設定すること)を事項するメソッド。
インスタンスを生成した時に間接的に呼び出される。
1 2 3 4 5 6 7 8 9 10 11 |
class Iphone { var language:String var passcode:String init(language:String, passcode:String){ self.language = language self.passcode = passcode } } var iphone = Iphone(language:"日本語", passcode:"1234") |
fa-chevron-circle-rightデフォルトイニシャライザ
クラス内の全てのプロパティに初期値が設定されている場合に自動的に作られるイニシャライザ。
1 2 3 4 5 6 7 8 9 |
class Iphone { var language = "日本語" var passcode = "1234" init(){ //自動生成されるデフォルトイニシャライザ(実際は見えない) } } var iphone = Iphone() |
fa-chevron-circle-right型としてのプロトコル
変数の型にプロトコルを指定することが出来る。
1 2 3 4 5 6 |
var country:KyotoProtocol = Japan() //変数countryはKyotoProtocolを批准しているクラスのインスタンスしか格納できない var country:KyotoProtocol & XProtocol = Japan() //変数countryはふたつのプロトコルを批准しているクラスのインスタンスしか格納できない |
親クラスがある場合は親クラスの後にプロトコルを書く。
1 |
class Japan:Asia, KyotoProtocol { } |
親クラスは1つしか指定できないが、プロトコルは複数指定可。
1 |
var country:Asia, AProtocol, BProtocol = Japan() |
fa-chevron-circle-right列挙体
Swiftに用意されていない独自の型を定義するための機能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//列挙対Weekの宣言 enum Week { case monday case tuesday case wednesday case thursday case friday case saturday case sunday } //Week型の値「monday」を変数todayに格納する var today = Week.monday |
fa-chevron-circle-right型メソッド
インスタンスを生成することなく、呼び出せるメソッド。
1 2 3 4 5 6 7 8 9 10 11 |
class Taiyaki { class func hasFIn() -> Bool { 〜 } } Taiyaki.hasFin() /*インスタンスを生成しなくても呼びだせる クラス名.メソッド名()*/ |
fa-chevron-circle-rightデリゲート
あるクラスだけでは処理できない命令を、そのクラスの代わりに行うクラスのこと。
fa-chevron-circle-right型キャスティング
現在の変数の型を別の型に変更する機能。