Swift学習⑥(codebelle)for,while

◆ for , while

〜まえがき〜

Ios アプリを作成したい(家計簿アプリ、ゲーム)

・比較的簡単らしく、Xcodeがあればすぐに開発をはじめられるのでどんどんやりたい

 ドットインストールにもXcode の使い方(無償)とSwift 入門(有料)があったため 併用していきたい。

 環境xcode 、paiza.io(ブラウザエディタ)

 教材:codebelle、その他webサイト

【本ブログについて】

・codebelle等の講義を参考に自分なりにアレンジしたコードを載せ理解を深めていく。

・又、当ブログは非商用でありcodebelle公式のブログではない。

・《ハック》(改造)は教材での学習のみでは納得できなかった部分について、コードを追加・削除してみたり、オリジナルのコードを作成し試行錯誤してみた箇所。

・《観察》は《ハック》についての考察や、教材もしくはググって参考にした事について、自分なりに理解を深める箇所。

 

◆ ループ処理

 条件によって行動を変化させる「制御文」を用いた処理

 制御文(ループ処理){for,while

    (条件分岐)   {if,switch

◆ for 文

条件が真の場合に処理を繰り替えしてくれる。

swift3.0 から、書式が変更され、for-in になった模様。

3.0ver 以前の書式はC 言語と同じだったようで、現在より少し複雑。

いずれC 言語も学びたいため、覚えておいたほうがよいか。

◆ for の基本的な書式(昇順・降順)

【書式1】昇順

for 定数名 in...囲{//} //範囲に入る数字を「範囲演算子と呼ぶ」//

【例1】

for jun in 0...3{
print(jun)
}
出力↓
0 1 2 3


【書式2】降順

for 定数名 in (範...囲).reversed(){//}

【例2】

for jun in (0...3).reversed(){ 
  print(jun) }
出力↓
3 2 1 0

 

《ハック》

for jun in (0...2).reversed(){
 for ken in 0...2{
  print("jun は:¥(jun),ken は¥(ken),")
} }
出力↓
jun は:2,ken は0,
jun は:2,ken は1,
jun は:2,ken は2,
jun は:1,ken は0,
jun は:1,ken は1,
jun は:1,ken は2,
jun は:0,ken は0,
jun は:0,ken は1,
jun は:0,ken は2,



《考察》

降順jun のはじめの処理がなされ、昇順ken が全ての処理を行い

降順jun の次の処理がなされ、昇順ken が全ての処理を行い...以下繰返し。

内側のfor の処理が全て終われば、外側のfor の処理が次へ進むらしい。

for の機能が理解できてきた。

範囲演算子 a...<b の場合は、b の手前までという意味らしい。

 

《ハック》

a...>b でやってみた結果、エラー発生

◆ for と配列

配列の要素分だけループする

 

【書式】

for 定数名 in 配列{ // }

【例】

var beefjaga:[String] = ["タマネギ","じゃがいも","牛"]
for guzai in beefjaga{
print("具材:¥(guzai)")
}
出力↓
具材:タマネギ
具材:じゃがいも
具材:

《観察》

配列beefjaga の要素が定数guzai に入っていき、beefjaga の要素数(3)まで繰り返す。

配列のindex 番号を取得することも可能

 

【書式】

for (index 番号,定数) in 配列.enumerated(){//}

【例】

var beefjaga:[String] = ["タマネギ","じゃがいも","牛"]
for (dex,zairyo) in beefjaga.enumerated(){
print("番号¥(dex),材料:¥(zairyo)")}
出力↓
番号0,材料:タマネギ
番号1,材料:じゃがいも
番号2,材料:

◆ 値の取得に間隔を設ける方法

【書式】

for 定数 in stride(from: 開始位置, to: 終了位置, by: 間隔){//}

【例】

for AAA in stride(from: 1, to: 15, by: 2){
print(AAA) }
出力↓
1 3 5 7 9 11 13

《ハック》

開始位置にオプショナル型のInt をアンラップして使ってみた。

let QQ = "10"
for AAA in stride(from: Int(QQ)!, to: 15, by: 2){
print(AAA)
}
出力↓
10 12 14

《観察》

できたーやったー!

from 以降の数字は、既に宣言された変数・定数を使ってもイケることが分かった。

◆ for と辞書

キーと値の組み合わせの数(要素数)文ループする

【書式】

for (キー定数,値定数) in 辞書{//}

【例】

let jso = ["A":10,"B":20,"C":30,"D":40]
  for (ki,ne) in jso{
  print("キー:¥(ki),値:¥(ne)") }
出力↓
キー:C,値:30
キー:D,値:40
キー:A,値:10
キー:B,値:20 //辞書のため、コンパイルするたび順序は変わる//

◆ String 型でfor を使う

文字列を一文字ずつ取り出せる。

【書式】

for 定数B in 定数A.characters{//}

【例】

let AAA = "今日のご飯はチキンカレー"
for curry in AAA.characters{
print(curry) }
出力↓
今 日 の ご 飯 は チ キ ン カ レ ー

《ハック》

for の中にfor を入れた

let AAA = "あい"
let BBB = "わを"
for curry in AAA.characters{
for apple in BBB.characters{
print(curry,apple) }}
出力↓
あ わ
あ を
い わ
い を

《観察》
昇順・降順と同じように、内側のfor の処理が全て終わってから外側のfor の処理が1 つ進む。

《補足》
for-in 文のループ処理において、次のループにスキップする方法(continue) と
条件を満たしたらループから抜け出すことができるbreak については、条件分岐を勉強してから。


◆ while

for との使い分けとしては...
 for:決まった数だけループ
 while:条件を満たしている間ループ
【書式】

while 条件式 {//}

【例】

var A = 1
while A < 4{ //A が4 より小さい場合繰り返す//
print(A)
A += 1 } //+= は A

《ハック》
A += 1 を無くしてみた結果↓
タイムアウト

《観察》
足し算されなければA の値が4 に達することはないため、永遠にループしてしまう。
条件式を「true」にすると無限ループ

《補足》
continue とbreak については、for-in 文と同様に後ほど学ぶ。