鳩ブログ

サラリーマンが綴るブログ

SwiftUIの勉強 復習をしたらだいぶ抜けていた...

f:id:hato36:20200730211323j:plain

  • そもそもの記述方法()?[]?
  • 関数の引数、戻値
  • 構造体の宣言、配列の宣言

もろもろ抜けている...
基本がなっていないのだ。

というわけで、ちょっと時間をかけていろんな復習をやってみた。
時間はかかったがかなり意味のある勉強と時間になった。

何を復習していたのか?

作るアプリは以前書いた通りだが、作る関数のイメージなども昔取った杵柄である程度イメージがついている。大したものではないのでさらさらと書くだけだったのだが、如何せん基本がなっていないから書くのにかなりつまづく。

これがそもそもストレスだったし、何より時間がかかっていた。
なので、そもそもの基本部分について少し時間をかけて復習した。

復習したポイントとしては、構造体と配列。
関数の引数と戻り値あたりの基本的なところ。
ただ、その中にも多くの要素が含まれるのと、私の過去の開発言語の知識が返って邪魔をして「こういう時はこういう書き方をするはずだ...」っていう考えを大きく考え直すことができた。まぁ平たく言えば慣れが足りていないというのもある。

そういう部分も含めてPlaygroundで単純な関数を作ったりということを繰り返し行って慣れていったのと、Swiftなりの考え方を理解出来たと思う。まぁそれでも一端ではあると思うが。

Swiftとして正しいかどうかは別で、やりたいことが出来るようになるという意味では目的は達成できたと思う。もちろんまだまだ足りない部分はあるが、その時はまたまとめて勉強するつもり。

 

構造体の値を編集して戻り値として返す

引数として構造体を受け取り、それを編集として戻り値として構造体を返すという処理をイメージしていたのだが、引数をvarで...というやり方がどうにもうまくいかず、結果として引数と戻り値を使って実現。
配列の構造体を引数とする際に「()」を付けがちだけどつける必要がないのね...
この辺がハマった理由。普通つけるでしょ的な余計な考えが邪魔をしていたわけ。
戻り値でも同様。「()」をつけるでしょ的な考えだったけど不要なのね。

//classを宣言
var aaaAA = [clsAa]()
//関数で構造体にデータを追加
aaaAA = addRecord(addAA : aaaAA)
 
func addRecord(addAA : [clsAa]) -> [clsAa] {
    var retAA = addAA
    //配列に追加
    retAA.append(contentsOf: [clsAa(name:"筒香",age:10)])
    retAA.append(contentsOf: [clsAa(name:"佐野",age:11)])
    retAA.append(contentsOf: [clsAa(name:"桑原",age:12)])
    //戻り値
    return retAA
}
 
//class
class clsAa {
    var name : String
    var age : Int
   
    init(name:String , age:Int) {
        self.name = name
        self.age = age
    }
}

ついでにinit(イニシャライザ)についても少し理解。

https://docs.swift.org/swift-book/LanguageGuide/Initialization.html
まだまだ、基本的なことの勉強不足。
ただ、本からきっかけをもらい、何かを自分で作ろうとイメージした結果で疑問が生まれ、本で覚えたことも含めて実践するという意味では必要な行為。
頭の体操にいいね。
 
後はデバッグ時に時間(ミリ秒も)も見ておきたいなと思うことがあるので、それも踏まえて関数を作ってみたりして、dateFormatter()をちょいと調べてみたり。
今はそんなに重い処理がないのでいいけど、通信するときとかはちょっと気になるよね?
  • 応答ってどれぐらい時間かかっているの?
  • 受け取った後の処理ってどれぐらいの時間なの?
  • 重い処理を変えた時に効果ってあったの?

という感じ。もちろん画面上に時間を登録したり、データの登録日時を登録したりすることも多々あると思われるのでそういうシチュエーションも踏まえて丁度よかったり。

//その結果をデバッグ領域に出力
printAddDT(aA : aaaAA)
 
//現在日時とclassの内容を出力する関数
func printAddDT(aA : [clsAa]) {
    let dt = Date()
    let dateFormatter = DateFormatter()
    // DateFormatter を使用して書式とロケールを指定する
    dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "Hms.SSSS", options: 0, locale: Locale(identifier: "ja_JP"))
    print(dateFormatter.string(from: dt))
    for count in 0 ... aA.count - 1 {
        print("名前:\(aA[count].name)(\(aA[count].age))")
    }
}

こういうものの積み上げがちゃんとしたプログラムになるんだと思いながら楽しんでSwiftを理解。しかしこういう時にPlaygroundって本当に便利。関数作るだけならこっちの方がライトに作れるから便利だね。

 

焦ると帰って無駄に時間がかかるから、もう少しじっくり勉強しつつ取り組もうと思ったわ。