ねことまなぶiPhoneアプリ制作入門

ねこでもわかりそうな解説を書きます。随時更新

構造体を使ってみよう

 

f:id:Osushinyan:20220228021540j:plain

 

構造体ってなんだにゃん?

 

 

 

クラスみたいなものです。

細かいことは実践するときに考えれば大丈夫です。

 

構造体 struct 名前 { ... }

struct Neko {

    var number1: Int;

    var number2: Int = 50;

}

f:id:Osushinyan:20220228021540j:plain

 

クラスと同じにしかみえないにゃん...

クラスを使ってみよう!

f:id:Osushinyan:20220228021540j:plain

 

クラスについて勉強するにゃん!

ところでクラスってなんだにゃん?

 

 

クラスとは、処理を何個も集めた箱のことです。

 

f:id:Osushinyan:20220228021540j:plain

 

どうやって使うにゃん?

 

 

クラスの作り方① クラスを定義する

    class NekoClass {

        let str01 = "neko"

        let str02 = "osushi"

        func dog(){

           print("wanwan")

        }

    }

 

クラスの作り方② クラスの中身を使う

    print( NekoClass().str01 )      // "neko"と出力される

    print( NekoClass().str02 )     // "osishi"と出力される

    NekoClass().dog()

 

f:id:Osushinyan:20220228023636j:plain

ねこねこワンポイント①

実際使うときは let neko = NekoClass() として、neko.dog()と呼び出す事が多いにゃん。

 

 

 

f:id:Osushinyan:20220228021540j:plain

 

ところでイニシャライザってなんだにゃん?

 

 

 

イニシャライザとは、クラスの中身の初期値を設定するときに使うものです。

 

イニシャライザの使い方 init()

    class NekoClass {

        let str01 = ""

        let str02 = ""

 

        init(){

            let str01 = "neko"

            let str02 = "osushi"

        }

    }

 

 

 

 

 

inoutキーワード

f:id:Osushinyan:20220228021540j:plain

 

い、いんあうと...?

 

 

inoutキーワードを使うと便利な場面を見てみます。

こんな関数を考えてみます。

 

func chuuru(kosuu: Int){

    kosuu = kosuu + 2

    print(kosuu)

}

 

この関数はkosuuという引数を関数内で変更しています。( kosuu = kosuu + 2 の部分 )

引数は定数の扱いなので、値を変更する事ができません。

なのでここにエラーが出てしまいます。

このエラーを出なくするのがinoutキーワードです。

 

inoutを使ってみると、さっきの関数はこんな感じになります。

 

func chuuru(kosuu: inout Int){

    kosuu = kosuu + 2

    print(kosuu)

}

var number = 5

print( chuuru(kosuu: &number) )

 

これでエラーは出なくなります。

 

f:id:Osushinyan:20220228023636j:plain

ねこねこワンポイント①

引数を変数にしちゃうのがinoutキーワードだにゃん!

 

 

 

 

 

 

関数を書いてみよう

f:id:Osushinyan:20220228021540j:plain

 

関数ってなんかかっこいいにゃん...!

 

 

関数の作り方

func 関数の名前( 引数: 型 ) -> 返り値の型 {

    return 返り値

}

func nekoKansuu(name: String) -> String {

    return "私は" + name + "です"

}

ここで print( nekoKansuu("ねこ") ) と書くと、

" 私はねこです " と出力される。

 

f:id:Osushinyan:20220228023636j:plain

ねこねこワンポイント①

引数を増やすときは " , " で繋げばいいにゃん!

 

 

 

 

 

f:id:Osushinyan:20220228021540j:plain

 

ところで、引数ラベルってなんだにゃん...?

 

 

引数ラベルがある場合とない場合を見てみます。

 

引数ラベルなし

    func hometownKansuu(place: String) -> String {

        return "私は" + place + "出身です"

    }

    print( hometownKansuu("東京") )

    // "私は東京出身です"と出力されます。

 

引数ラベルあり

    func hometownKansuu(from place: String) -> String {

        return "私は" + place + "出身です"

    }

    print( hometownKansuu(from: "東京") )

    // "私は東京出身です"と出力されます。

 

引数ラベルとは、コードを読みやすくするための引数の説明のようなものです。

 

f:id:Osushinyan:20220228023636j:plain

ねこねこワンポイント②

ラベルを省略したいときは" _ place: String "のようにアンダーバーをつければいいにゃん!

 

 

 

 

オプショナル型

f:id:Osushinyan:20220228021540j:plain

 

オプショナル型ってなんだにゃん!?

 

 

 

f:id:Osushinyan:20220228023636j:plain

ねこねこワンポイント①

オプショナル型とは、"中身が空でも大丈夫な変数"

     のことだにゃん!

 

オプショナル型 var text: String?

普通に変数を定義して、はてなをつけます。

普通の変数では中身が空だとアプリが落ちてしまうけど、オプショナル型だと中身が空でも大丈夫です。

 

f:id:Osushinyan:20220228023636j:plain

ねこねこワンポイント②

中身が空のときは"nil"が出力されるにゃん!

 

 

詳しいことは後々説明するにゃん!

 

while文、for文による繰り返し

f:id:Osushinyan:20220228021540j:plain

 

今日は繰り返し文について勉強するにゃん!

 

 

 

while文 while 条件 { 処理 }

while number < 10 {

    print( number )

    number += 1

}

 

for文 for 条件 { 処理 }

for number in 0...10 {

    print( number )

}

if文、switch文による条件分岐

f:id:Osushinyan:20220228021540j:plain

 

今日は条件分岐について勉強するにゃん!

 

 

if文 if 条件 { 処理 } else { 処理 }

if number > 100 {

    print( number )

} else {

   print( "10未満です" )

}

 

switch文 switch 値 { case 条件: 処理 case 条件: 処理 ... default: 処理}

var number = 100

switch number {

    case 100: print("100です")

    case 50: print("50です")

default: print("それ以外です")

}