鳩ブログ

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

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は本当に便利。関数作るだけならこっちの方がライトに作れる。

 

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