【Swift UI】画面遷移(モーダル)

モーダル遷移 下から上に画面が表示される。 Structure等 sheet バイディングされた値がtrueのときにシートを表示する。 コード ボタンをクリックするとフルモーダルを表示する。 struct ContentView: View { @State var activeModal = false var body: some…

【Swift UI】@State

@State 状態を管理するためのプロパティラッパー。特定のプロパティが変更されると、関連するビューが自動的に再描画されるようにするための仕組みを提供。 プロパティラッパー 特定のプロパティに対するアクセスや保持方法をカスタマイズするための仕組み。

【Swift UI】画面遷移(ナビゲーション)

ナビゲーション遷移 左から右に流れるようなアニメーションで遷移する。 戻るボタンは自動で作成される。 Structure等 NavigationStack ルートビューと追加のビューを表示するためのビュー NavigationLink ナビゲーションプレゼンテーションを制御するビュー…

【Swift UI】ファイルの書き込み

概要 テキストファイルに文字列を書き込む XCodeでプロジェクト作成 XCodeを起動して、[Create a new Xcode project]を選択。[App]を選択して[Next]をクリック。[Project Name]に"FileWriter"を入力して[Next]をクリック。適当なフォルダ(以下A)を選択して[C…

【Swift UI】ファイルの読み込み

概要 テキストファイルを読み込む。読み込んだ文字列を画面に表示する。 コード import SwiftUI struct ContentView: View { var body: some View { VStack { Text(getFileStr()) } } } func getFileStr() -> String { guard let fileURL = Bundle.main.url(…

【Swift UI】プロトコル

開発環境 macOS Monterey ver12.6.8 XCode Version14.2(14C18) クラスや構造体が保持するプロパティやメソッドなどの決まりを定めている。 他の言語のインターフェースに似ている。 コード例 XCodeで用意されている、1つの画面を表示させるテンプレートであ…

【SwifUI】計算プロパティ

計算プロパティ(Computed property) 値を計算するためのプロパティで、以下の特徴を持つ。 固定値は持たない 他のプロパティにアクセスできる 呼び出されたタイミングで処理を行う getとsetが存在 構文 var プロパティ名: 型名 { } 例:税込み価格を計算 s…

【SwiftUI】スタックView

スタックView 名称があっているか分からないが以下のスタックに記載されているViewについてまとめる。 VStack 子を縦方向に配置するView VStack | Apple Developer Documentation 。 VStackイメージ図 HStack 子を横方向に配置するView HStack | Apple Devel…

【iPhoneアプリ】乱数表示アプリ

乱数表示アプリ 入門として乱数表示アプリを作成する。初期表示とボタンをクリックした際に乱数を表示する。 開発環境 macOS Monterey ver12.6.8 XCode Version14.2(14C18) コード struct ContentView: View { // SwiftUIではViewは保持するプロパティを変更…

【iPhoneアプリ】リストアプリ

リストアプリ 入門としてリストアプリを作成する。 開発環境 macOS Monterey ver12.6.8 XCode Version14.2(14C18) プロジェクトの作成 XCodeで[Create a new Xcode project]-[App](場合によってはSingle View Application?)で[List App]を作成。 Appは用意…

二分探索(binary search)

概要 データ探索アルゴリズムの1つ。探索対象はソート済みのデータ群。探索範囲を半分に絞り込む作業を繰り返す。 半分に絞り込む作業 ①探索範囲の中心の値を比較する。②探索対象より大きい場合は中心より左に存在する。③探索対象より小さい場合は中心より右…

指数と対数

指数と対数 指数も対数も"ある数"と"掛け算をする回数"の関係。 指数 "ある数"と"掛け算をする回数"があらかじめ分かっている。y=ax 対数 "ある数"と"掛け算をした結果"があらかじめ分かっている。y=logaba:底(ある数)b:真数(掛け算をした結果) 1日ご…

Bit演算

Bit演算(bitwise operation) データをビット列(2進数の0と1の羅列)とみなして、ビットの移動やビット単位の論理演算 演算の種類 AND演算 var a = 45; // 101101 var b = 25; // 011001 var c = a & b; // 001001 = 9 OR演算 var a = 45; // 101101 var b…

丸め誤差

丸め誤差 小数点以下の数は2進数で表現できないため近似値を使用している。例えば"0.1(10)"は"0.0001100110011...(2)"となり、"0011"が永遠に循環する。このため、適当な桁で結果が偶数になるように丸める(最近接偶数への丸め)。 以上から発生する誤差が丸…

深さ優先探索(Depth-First Search)

深さ優先探索(Depth-First Search) ある状態からはじめて、遷移できなくなるまで状態を進める。遷移できなくなったら1つ前の状態に戻る。上記はstackのpushとpopで実現できる。このため、深さ優先探索は再帰関数(呼び出し元に戻る)で実装できる場合が多…

再帰関数(Rucursive Function)

再帰(Recursion) ある物事について記述する際に、記述しているもの自体への参照が、その記述中にあらわれること。つまり、再帰関数はある処理を実行中にそのある処理があらわれること。⇒関数内で自身を呼び出す関数。 public void ProcessA() { ... Proces…

Factory Methodパターン

Factory Method 生成に関するデザインパターン。使用頻度は少ないっぽい。直訳すると工場のメソッドだが、何の工場なのか?⇒インスタンスの工場Factory MethodはVirtual Constructorとも呼ばれコンストラクタの代わりとなるメソッド。このメソッドはスーパー…

Template Methodパターン

Template Method 振る舞いに関するデザインパターン。スーパークラスで処理手順を決定。サブクラスで各処理を実装。 例:丼物 丼物をスーパークラスとする。丼物を作成する流れ(処理手順)は以下 ご飯を炊く トッピングを料理 ご飯を盛る トッピングを乗せ…

Abstract Factoryパターン

Abstract Facotry 生成に関するデザインパターン。 整合性が必要とされる一連のオブジェクト群を具象クラスを指定することなく生成するインターフェイスを提供する。 整合性が必要とされる一連のオブジェクト 立ち技格闘技を例に考える。立ち技格闘技といっ…

Singletonパターン

Singleton 生成に関するデザインパターン。システムにクラスのインスタンスが1つのみであることを保証する。一般的に"グローバルスコープ"からの呼び出しによく使われる。しかし、"複数アクターに対して責任を持ってしまう"ため、SOLID原則の 単一責任の原則…

SOLID原則

ソフトウェア設計をより平易かつ柔軟に保守するための原則。 原則は以下の5つあり、SOLIDはそれぞれの頭文字からきた造語。 ttkcd.hatenablog.com ttkcd.hatenablog.com ttkcd.hatenablog.com ttkcd.hatenablog.com ttkcd.hatenablog.com

依存性逆転の原則(Dependency Inversion Principle)

SOLID原則のひとつ。 上位モジュールは下位モジュールに依存してはいけない。どちらのモジュールも抽象に依存すべき。 抽象は実装の詳細に依存してはならない。実装の詳細が抽象に依存すべき。 internal class BClz { internal string GetGreet() => "こんに…

依存性の注入(Dependency Injection)

簡潔に 外部からインスタンスを注入すること。以下のクラスAはクラスBに依存している。 クラスA:依存している クラスB:依存されている class A { private B B; } class B {} クラスAのメンバ変数のクラスBを外部から注入する。 コード例解説 依存性の注入…

インターフェイス分離の原則(Interface Segregation Principle)

SOLID原則のひとつ。クライアントが使用しないメソッドへの依存を、強制すべきではない。インターフェイスの具象クラスでは、メソッドの実装が強制される。 つまり、具象クラスで不要なメソッドの作成が強制されないように、小さなインターフェイスを作る必…

型の入出力規格の互換性

型の制限の強弱 「強い・弱い」、「狭める・広げる」等が使われる。以下の3つのクラスをもとに、型の制限の強弱を考える。 class A {} class B : A {} class C : B {} それぞれを別ファイルにあると考えると分かりやすい。 AはBの存在もCの存在も知らない。 …

契約による設計(Design By Contract)

プログラムコードの中にプログラムが満たすべき仕様について記述を盛り込むことで設計の安全性を高める。 仕様の記述を盛り込む C#ではAssertを使用する。 System.Diagnostics.Debug.Assert(//条件) 条件にはtrueになる条件を記述する。 AssertはDebugビルド…

リスコフの置換原則(Liskov Substitution Principle)

継承関係が正しいかの判断基準。派生型(サブクラス)は、その基底型(スーパークラス)と置換可能でなければならない。基底型の変数に派生型の値を代入しても支障をきたさないこと。サブタイプはスーパータイプのオブジェクトのすべての振る舞いと、更に別…

開放閉鎖の原則(Open/Closed Principle)

SOLID原則のひとつ。 開放(Open) 拡張に対して開いている。 閉鎖(Closed) 修正に対して閉じている。 新しく機能を追加するとき、既存のコードを変更せずにあたらしいコードを追加するだけで済むようにする。 格闘家を例にとる 一般的に格闘技には階級が…

単一責任の原則(Single Responsibility Principle)

定義 SOLID原則のひとつ。 単一責任の原則について調べると以下のように記述されている。 Every class should have only one reason ton change. A module should be responsible to one, and only one actor. 前者は「クラスの変更理由はひとつ」、後者は「…

対象桁の値を取得する

1桁目について考える 12345の1桁目の値(5)を取得することを考える。10で割った余りが1桁目の値。 n桁目について考える 対象桁を1桁目にすれば良い。 public static class DigitNumGetter{ public static int GetIntegerDigitNumber(int num, int digit){ v…