【Swift】Segueを使わない画面遷移

はじめに

Swiftでiosアプリ開発を勉強しているのですが、 Segueを使わないで画面遷移する方法を勉強したのでメモします。

初期設定

xcode version

今回は ver10を用いました。

ファイル構成

f:id:jesushill:20181021161629p:plain

上記の写真のように以下のようなフォルダ構成にします。

  • StoryBoard

    • Initial
    • Next
  • Contoroller

    • InitialViewController
    • NextViewController

それぞれの名前に対応したStoryBoardとControllerが対応する形としています。 (例えば、InitialViewControllerなら StoryBoardのInialに対応)

Info.plistの設定

通常、Single View appなど、Xcodeで新規プロジェクト作成をした場合、 エントリーポイントが初期設定 Main になるので、下記のキャプチャにある通り、 Main storyboard file base nameInitial を参照するよう、修正を行いました。

f:id:jesushill:20181021161825p:plain

初期画面

以下のボタンを設定しました。

f:id:jesushill:20181021163003p:plain

このボタンを押せば次の画面へ遷移する仕組みを今回は記述しました。

プログラム

画面に設定したボタンを押したら、画面遷移をするように 以下のようなプログラムを設定しました。

class InitialViewController: UIViewController {
   # 略

   @IBAction func didTouchNextButton(_ sender: Any) {
        let storyboard = UIStoryboard(name: "Initial", bundle: nil)
        let viewController = storyboard.instantiateViewController(withIdentifier: "next")

        self.present(viewController, animated: true, completion: nil)
    }
}

画面遷移先のInitialには対応するInitialViewControllerを紐づけ、Storyboard IDに next と設定すれば完了です。

ネットでググってみると、画面遷移先のコントローラーを指定した以下の記述 let viewController = storyboard.instantiateViewController(withIdentifier: "next")as! NextVIewController と型変換を入れている人もいますが、指定した先が対応していれば、 書かなくても大丈夫です。

メモ 徹底理解ブロックチェーンを読む【ch14】

トランザクション格納の仕組み

  • ブロックチェーンデータ構造

    • 順序を持ったブロックと呼ばれる単位で構成
  • ブロックは以下の要素で構成

    • ブロックヘッダー(前のブロックヘッダーを参照)
      • ハッシュ参照されている。
    • マークル木(トランザクションデータが含まれている)

徹底理解ブロックチェーンを読む【ch13】

ブロックチェーンでのデジタル署名の仕組み

トランザクションの署名

トランザクションの検証

  • トランザクションデータ(署名除く)のハッシュ値を作成
  • 譲渡する側のアカウントの公開鍵を用いて、デジタル署名を復号
  • 上記の2つの値を比較し、同じならば秘密鍵の所有者によって承認されている。

なぜうまくいくのか

徹底理解ブロックチェーンを読む【ch12】

暗号化の仕組み

  • 概略 暗号(鍵)を使ったデータの保護と保護の解除には、それぞれ暗号化と復号という用語を使う。 暗号化されたデータは暗号文と呼ばれる。

  • 対象鍵暗号 データの暗号化と復号に同じ鍵を利用

  • 非対称鍵暗号 暗号化と復号に違う鍵を利用

現実世界での非対称鍵暗号

非対称鍵暗号を用いる際は、それぞれの鍵に名前を用いる。 一般に、公開鍵(すべてのユーザーに公開)・秘密鍵暗号(公開しない)と呼ばれる。

ブロックチェーンでの非対称鍵暗号

徹底理解ブロックチェーンを読む【ch10】

データのハッシュ化

分散型のP2Pシステムでは膨大な量のトランザクションデータを扱うことになる。 トランザクションデータが唯一のものかどうかの識別と比較はすばやく行う必要がある。

ハッシュ関数の特性

暗号的ハッシュ関数の特徴

  • あらゆる種類のデータに対してハッシュ値をすばやく提供
  • データに対して決定的
    • 同じインプットに対して、同じアウトプットを出力
  • データに対して疑似ランダム
  • 一方向性関数
    • 出力から入力値を追跡出来ない関数のことを呼ぶ
  • 衝突耐性がある
    • 全く異なるデータから全く同じハッシュ値を出力するのが難しい

徹底理解ブロックチェーンを読む【ch04】

問題の核心を明らかにする

P2Pシステムの課題

各人が継続的にP2Pに貢献するためには、システムを信用し、やりとりにおいて間違えがないことを確信する必要がある。

  • 完全性の脅威
    • 技術的な障害
    • 悪意をもつピア
  • 完全性の達成
    • ピアの数
    • ピアの信頼性

徹底理解ブロックチェーンを読む【ch03】

可能性を認識する

P2Pとは

定義

複数のノードで(個々のコンピュータ)で構成される分散システム

複数のノードは以下の役割計算リソースの提供を負う供給者であり、消費者でもある。

P2Pアーキテクチャ

基本的には分散システムだが、一部、集中型の要素を利用するのもある。 集中型の要素を用いた代表的なP2Pナップスター

完全な分散型は集中システムが介在する必要がないため、中抜きが必要なくなる。

音楽ダウンロードを例にすると、

集中システム: アーティスト(音源作成) → 集中システム(レコード会社) → (購入)ユーザー

に対して

分散システム: アーティスト → ユーザー

と、中抜きがなくなる。