Swift ジェネリクス

Client一覧を表示

   override func viewDidLoad() {
        super.viewDidLoad()
//ObservedFetchedRoutes下記に記載
        ofRoutes = ObservedFetchedRoutes(uiRoutes)
        uiRoutes.delegate = self
        dmDISource = DmDeliveryItemsSource(uiDeliveryItems)
        uiDeliveryItems.delegate = self
    }

ジェネリクス部分

fileprivate class ObservedFetchedRoutes: ObservedFetchedData<DmClient>,UITableViewDataSource {
    /// Detail pane が有る
    var hasDetail: Bool = false
    /// 初期表示後に選択する行
    var toSelectRow: Int?
    /// アクティブ配達エリア
    var activeClient: DmClient? {
        if let areas = frc.fetchedObjects {
            let row: Int
            if let ts = toSelectRow {
                row = ts }
            else if let ir = table.indexPathForSelectedRow?.row {
                row = ir }
            else {
                return nil }
            return areas.count > row ? areas[row] : nil
        }
        return nil
    }
    /// 初期化
    init(_ table: UITableView) {
        super.init(table, cellId: "contentCell")
        table.dataSource = self
    }

Rails css うまく表示されない時

こちらのサイトは、とてもわかり易い説明です。

www.transnet.ne.jp

railsはSCSSをコンパイルする、アセットパイプラインという仕組みがある。

app/assets/stylesheets

配下にcssが出来る。

application.scss で

*= require_tree .

を外すと、SCSSがプリコンパイルされない。
プレコンパイル対象に指定するのは

config/initializers/assets.rb

ここでプレコンパイル対象に指定する。

また、一度プレコンパイルすると、 それを毎回読み込みに行くので反映されない。 その場合、 ファイルを削除する。

RailsアプリでCSSが更新されない… – tamo's blog

SCSSのコンパイル方法も覚えておく必要がある。

book.scss.jp

PHP セッションについてまとめ

セッションは画面をまたいで、変数を保存しておく仕組み

利用方法

//これが必ず画面を表示するときに必要
session_start();

値の確認

isset を利用

定義 (PHPマニュアルより参照)

f:id:happy_teeth_ago:20190608111345p:plain

HTML側の入力窓

 <div class="container">
    <label for="email">メールアドレス:</label><br />

//name属性を指定それでセッションに保持される
//前画面から戻ってきたときのためにvalueで表示しておくようにする
    <input type="email" id="email" name="email" value="<?php print($_SESSION['email']);?>" />
  </div>

フリー画像 サイトまとめ

マテリアルデザインはここ

無料で学べる、さすがグーグル

https://codelabs.developers.google.com/codelabs/design-material-darktheme/?authuser=0#2

ここも参考にします。

material.io

画像収集サイト

pixabay 無料なのがいい

pixabay.com

unsplash 無料とは思えないクオリティー

unsplash.com

日本人のモデルはここ
画像はいまいちだけど、1日1枚なら無料 www.photo-ac.com

Font Awesome (おおすごいフォント の意味)

アイコンならここ

fontawesome.com

ここのアイコンもいい! 200円くらいなので、依頼するよりかったほうが安い

www.iconfinder.com

無料なので文句言ってはいけない 多少センス悪いけどアイコン

icooon-mono.com

Swift NSFetchedResultsControllerの考察

NSFetchedResultsControllerについてまとめてみようと思う

NSFetchedResultsControllerを使うとCoreDataとUITableViewがとても便利になります。

実装例 frcImplはNSFetchedResultsControllerを実装(implement)していることを表す

  /// FetchedResultsControllerインスタンス
    private var frcImpl: NSFetchedResultsController<T>!

//ポイント
//こうすることで.frcでNSFetchedResultsControllerへアクセス出来る
    var frc: NSFetchedResultsController<T>
        { get { return frcImpl } }

次へボタンが押されたときの処理

   /// [次へ]
    @IBAction func nextDelivery(_ sender: Any) {
//複数条件の判定
        guard var border = uiRoutes.indexPathForSelectedRow?.row,
//ofRoutesで型を決定->frcで詰め込み(getter)->fetchedObjectsで配列のfetch結果が返却される。
                let clients = ofRoutes.frc.fetchedObjects else {
            return }

guard 複数条件の判定

アンラップした変数をスコープ外で利用します

カンマで区切って複数条件をチェックしつつアンラップできます。
長い処理の中での中断を判定する処理としてもguardを利用すべきです。

border, clients が条件のあと利用できます。アンラップされています。

clients CoreDataテーブルのDmClientをfetchした結果が配列で詰め込まれる

概念図

f:id:happy_teeth_ago:20190616121457p:plain

ofRoutes

   /// 配達エリア一覧Table data source
    private var ofRoutes: ObservedFetchedRoutes!


// MARK: 配達先Table data source
  fileprivate class ObservedFetchedRoutes: ObservedFetchedData<DmClient>,UITableViewDataSource {

ObservedFetchedRoutes

ObservedFetchedRoutes はObservedFetchedDataを継承 DmClientはcoredata のテーブル

ObservedFetchedData

CoreDataのfetchの値監視しているクラス

/// CoreDataの fetch と fetch後の変更監視、TableView への供給と自動更新を行う
class ObservedFetchedData<T: NSManagedObject>:
    NSObject, NSFetchedResultsControllerDelegate {

NSFetchedResultsControllerDelegate はいろんなタイミングでfetch結果を返却してくれる

fetchedObjects

NSFetchedResultsControllerのプロパティでfetchした結果を配列で返却してくれる。

fetchしていないと、nilが返却される

developer.apple.com

これらをテーブルに表示していく。 つづく。