【Swift4】swiftで今回利用した先人の礎をまとめておく

研究
この記事は約2分で読めます。

埋め込み祭りなのでmoreを使います…

・swiftで画像にモザイクを掛けてやりたかった

[iPhone] 画像をぼかし・モザイク化する2つの方法

・UISwitchを動かした

【Swift3.0】 UISwitchを使ってラベルを変更するSwiftでiOSアプリの開発 Switchボタンの動かし方|teratail

・swiftズブの素人シリーズ
文字列操作

Swift4 での文字列操作 – Qiita

配列操作

Swiftで配列の要素を削除(remove)する方法 | Swift5 入門書-逆引き大全集

Date型

Card

UserDefault

UserDefaults に保存されているデータをすべて表示する – xyk blog

環境:Swift3 UserDefaults に保存されているデータをすべて表示する for (key, value) in UserDefaults.standard.dictionaryRepresentation().sorted(by: { $0.0 (value)”) } または if let appDomain = Bundle.main.bundleIdentifier, let dic = UserDefaults.standard.persistentDomain(forName: appDomain) { fo…

・条件分岐で画面遷移をしてやりたかった(但しUITabbarControllerで対応している箇所がある筈)

【Swift】コードを使った二つの画面遷移の方法 – Qiita

・segueでなく画面遷移をしたかった、なんか今回画面遷移周りでめちゃくちゃ悩んだ気がする

Segueを使わずにかっこよく画面遷移する方法を考えた – hiragram no blog

最近Segueをいかに安全に使って画面遷移するかということを考えていたけど、#swtwsを見ていてそもそもSegueを使わない/嫌いという人が結構いるんだなと思ったのでSegueを使わないで楽に安全に画面遷移する方法を考えてみたら意外といい感じになった。 コード内ではSegueのidentifierを単なる文字列として扱う所 performSegue(withIdentifier: “toDetailVC”, sender: nil) だからSegueの名前が変わった時に直し忘れていても コンパイル 時にチェックできない。 遷移先のViewControllerをいじるのはいわゆるprepareForSegueメソッドの中なので、複数の遷移に関する処理が一つのメソッドにまとめられてしまう所 prepareForSegueの中で遷移先の型でVCを取得するにはダウンキャストが必要な所 identifierと同じく行き先の型が正しいかどうかも コンパイル 時のチェックができない。 これくらいかと思う。 本題。 Segueを使わずに画面遷移をするということは、どうにかして遷移先のVCの インスタンスを作って、 presentなり show なりで表示するということだろう。 VCの インスタンスをどこから作るかというと、UIStoryboardの instantiateInitialViewController()か instantiateViewController(withIdentifier:_) を使うことが多いはずだ。 コードに起こすとこんな感じだろうか。 確かにSegueのidentifierからは脱却したが、Storyboardの名前はまだ文字列で指定しているし、ダウンキャストもある。こんなコードがいろんなVCのいろんなところに散らばっているのは、相変わらず治安が悪いと言えるだろう。 こんな感じのコードで気軽に画面遷移できたらよくないですか。 これは以下の仕組みによって実現できる。 まず、UIViewControllerのサブクラスに対して、「このVCはStoryboardから インスタンスを作ることができる」ということを示す プロトコル を定義する。 これによって、以下のコードでキャスト済のVCの インスタンス を得られるようになった。 let vc = DetailViewController.instantiateFromStoryboard() 次に、UIViewControllerにこのようなextensionを追加する。 シグネチャが長くなってしまったが、重要なのは vcType: T.Typeと configuration: ((T) -> Void)である。 このメソッドは型パラメータTを持ち、このTはStoryboardInstantiatable プロトコルを実装し( )、且つUIViewControllerあるいはそのサブクラスである( where T: UIViewController)という制約がかかっている。 vcType: T.Typeは遷移先のVCの型である。 configuration: ((T) -> Void)は遷移先のVCの インスタンスを引数にとる クロージャ で、この中で遷移先VCに値を渡したり、プロパティを変更したりすることを想定している。 このメソッドの具体的な実装は以下のようになる。数字の順番が逆転しているが、数字の順に説明する。 まず、①の行では先程定義したStoryboardInstantiatableの instantiateFromStoryboardメソッドを使い、Storyboardから遷移先VCの インスタンス を得る。 次に、②の行で呼び出し元から受け取ったconfigurationブロックを使ってVCの インスタンス を設定する。 但し、この時点ではまだIBOutletなプロパティが初期化されておらず(= nil)、例えばconfigurationブロックの中でIBOutletでStoryboardに接続されたUILabelのテキストを設定しようとすると暗黙アンラップによってアプリがクラッシュする。 これはUIViewControllerの viewが遅延ロードされるためで、一度読み出してやればサブビューも含めて初期化される( loadViewや viewDidLoadも呼ばれる)。その為の③の行である。 configurationブロックを用いてVCの設定をしたら、あとは従来あるUIViewControllerの show …

・要するに遷移先のviewに引数を渡したかった

プログラム側からUITabBarControllerを切り替えて、さらに画面遷移させたい時 – makoラボ

FirstViewの上に置いてある「Second → Third」ボタンを押すと、SecondViewのあるタブに切り替わってなおかつThirdViewに切り替わる。 Second → Third」ボタンプログラム側でやらないといけないことは大きく2つ FirstViewからSecondViewのタブへの切替 SecondViewからThirdViewへの遷移 …

・やりたいことチャットに近かったので先人の礎をなぞってみた

iOS – Firebaseを使ってメッセージアプリを作ってみた1

コメント

タイトルとURLをコピーしました