39ギター

35年ぶりに弾き始めたクラシックギター
神経痛と戦いながら
どこまでバッハに迫れるか
蝶も花もアーチェリーもあるよ

まあ先のことは先で考えることとして

2020-02-06 22:30:08 | 日記

こんばんは

 

少し寒くなりました広島では9時ごろにほんの5分間ほど雪が降って初雪を観測しました

今日は一日中エアコンをつけていたので部屋の中はむしろ快適でした

 

さてSwiftUIによるアーチェリーアプリ作成ですが、今まではデータのない画面の動きだけでした

そろそろデータ管理をしないといけないので色々と考えています

まず一時的にはデータを配列で持つことにします

3次元配列で3x3x24の整数配列です

はじめの3は矢1本のデータで得点と的中痕のxy座標、次の3はその矢を3本、次の24はそれを12コースx2

3次元配列の宣言はこんな感じ

    @State var roundData = [[[Int]]](repeating:[[Int]](repeating:[Int](repeating:0,count:3),count:3),count:24)

1行で宣言できたようです

他にも各Viewで使う変数が色々とあります

    @State var strRound: String = "1st"
    @State var strInOut: String = "In"
    @State var targetNo: Int = 12
    @State var selectedButton: Int = 0
    @State var point_1: Int = 5
    @State var point_2: Int = 4
    @State var point_3: Int = 3
    @State var showPosition: Double = -1
    @State var position: CGSize = CGSize(width: 180, height: 300)   
    @State var roundData = [[[Int]]](repeating:[[Int]](repeating:[Int](repeating:0,count:3),count:3),count:24)

これはまだ一部なんですが、これらを各Viewに@Bind宣言で渡していくんですが、だんだん数が増えてきてやりにくくなってきました

そこでEnvironmentObject属性のデータクラスを作ってアプリ全体で使えるようにします

まだ調べているところなんですが、なんとかなりそうな気がします

データが全てのViewで共有できると、例えば十字マークを動かしてポイントを決めて得点を計算して得点欄に表示したりデータ配列に格納したり各Viewへのデータの伝達がやりやすくなります

今はまだ1画面だけなのですが、最終的にはもっと画面が増えるので今のうちにデータの共有化を図っておきましょう

 

それからデータの保存ですが、これも色々と考えています

本当はCoreDataと言うのを使うべきなんでしょうが、勉強不足でよくわかりません

SQLを直接利用できるデータベースがあると良いのですが、SQLiteなどもラッパーと言って高度な機能と一緒に複雑なものになっているようです

Pythonista3でやったようにSQLite3が簡単に使えると一番良いのですけどね

ネットで調べていると「Realm」と言うモバイル用のデータベースがあるそうです

これも面白そう、調べてみる価値はありそうです

あとは単純にプログラムで解決する方法で、内部のデータをシリアライズと言って一つの塊にしてファイルに落とすかUserDefaultと言ってアプリ内部に保存する方法です

 

ちょっとしたアプリでもやることや考えることが山のようにありますね

まあ先のことは先で考えることとして、とりあえず内部データをきちんと宣言して管理できるようにしましょう