Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 284 - Autolayoutの実習3 M(モデル)の実装

Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena

ログインのステップには、何気にMVCモデルのM(モデル)を実装させて利用している。

ちょっとこれの説明をしておこう。

ユーザーインターフェイスから切り離したログインユーザーのデータベースを作成します。

講義では、既に作っているUser.swiftファイルを開いてプロジェクトにコピーしていますが、実際にUser.swiftファイルを作ります。

メニューからFile->New->File...を選びます。

新しいSwift Fileを選んで名前をUserにしてAUtolayoutプロジェクトのセーブしれば準備完了です。

import Foundation以下に次のようにコードします。

struct User
{
 let name: String
 let company: String
 let login: String
 let password: String
    
 static func login(login: String, password: String) -> User? {
  if let user = databese[login] {
   if user.password == password {
    return user
   }
  }
  return nil
 }
    
 static let databese: Dictionary<String, User> = {
  var theDatabase = Dictionary<String, User>()
  for user in [
   User(name: "John Applessed", company: "Apple", login: "japple", password: "foo"),
   User(name: "Madison Bumgarner", company: "San Francisco Giants", login: "madison", password: "mannn"),
   User(name: "Yuji Tai", company: "Tai Medical Clinic", login: "medicaltai", password: "imgreat"),
   User(name: "John Sculley", company: "Sculley Brothers", login: "jsculley", password: "exapple")
   ] {
   theDatabase[user.login] = user
  }
  return theDatabase
 }()
}

ユーザー情報を処理するUser構造体(structure)を構成するプロパティとメソッドをみていきます。

4つのString型プロパティを持っています。

次にログインをするためのメソッドloginの定義です。引数としてプロパティのloginとpasswordを受け取り、自身のUser型を返します。当然nilを返す場合もあるのでオプショナル(?)設定は当然です。

メソッドのコードを考える前に次のコードブロックをみます。

タイプ・プロパティ(Type Properties)

実は、このタイププロパティ、ちゃんと理解していなかったような気がします。型(Structure, Enum, Class)がプロパティとしてインスタンスを持つことです。

  • Structure型、enum型は、値保持型プロパティ(Stored Properties)と計算型プロパティ(Computed Properties)を持つことができ、キーワード「static」を使用する
  • Class型は、計算型プロパティ(Computed Properties)を持つことができ、キーワードに「class」を使用する

それにしても、このコード内のstatic宣言部分はプロジェクト全体で使用するDictionary型のdatabaseのインスタンスtheDatabaseです。宣言をするのと一緒にインスタンス化しなければならないので、ジェネリックを使って宣言とインスタンス化を同時にする方法ですが、宣言が入れ子状態になっているので何か気持ちの悪い感じがします。

これでプロジェクト内で使用できるdatabaseインスタンス、theDatabaseを1つだけ持つStructure型のUserができるということです。

今日はここまでにします。