Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 286 - Autolayoutの実習4

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

User.swiftでユーザーデータを管理させます。

UIViewControllerでログイン管理をさせます。

class ViewController: UIViewController {

 @IBOutlet weak var loginField: UITextField!
 @IBOutlet weak var passwordField: UITextField!
 @IBOutlet weak var passwordLabel: UILabel!
    
 override func viewDidLoad() {
  super.viewDidLoad()
  updateUI()
 }

 var loggedInUser: User? { didSet { updateUI() } }
 var secure: Bool = false { didSet { updateUI() } }
 
 private func updateUI() {
  passwordField.secureTextEntry = secure
  passwordLabel.text = secure ? "Secured Password" : "Password"
 }
  
 @IBAction func login() {
  loggedInUser = User.login(loginField.text ?? "", password: passwordField.text ?? "")
 }

 @IBAction func toggleSecurity(sender: AnyObject) {
   secure = !secure
 }
}

このViewControllerのコードの中で、login入力を制御するパートが次のコードです。

@IBOutlet weak var loginField: UITextField!
usernameFieldと関連付けられています。

var loggedInUser: User? { didSet { updateUI() } }
ログインしてきたユーザーを保持する変数loggedInUserを用意します。そして、お決まりのようにプロパティ・オブザーバーでセットされています。ここでちょっと違和感があるのは、変数secureと異なり、変数の初期化がされていないということです。「?」オプショナルがセットされているので、宣言時にnilが設定されるということでしょうね。

@IBAction func login() {
loggedInUser = User.login(loginField.text ?? "", password: passwordField.text ?? "")
}

loginボタンに関連付けられているアクションメソッドです。Userクラスのメソッド「login」が呼ばれています。User.swiftを確認すれば分かりますが、このメソッドは2つのパラメーターを引数として受け取ります。

static func login(login: String, password: String) -> User? {
 if let user = databese[login] {
  if user.password == password {
   return user
  }
 }
 return nil
}

関数(Function)とメソッド(Method)はほとんど同義と捉えていましたが、引数の記述法が異なることを忘れていました。関数ならば2つの引数を記述する場合、どちらも外部パラメーターを書きません。しかし、メソッドの場合、最初の引数はいりませんが、2つめの引数に外部パラメーターを記述します。

引数の書き方は、関数、メソッド、初期化などそれぞれ異なるのでいつも混乱してしまいます(^_^;)

今日はここまで。