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つめの引数に外部パラメーターを記述します。
引数の書き方は、関数、メソッド、初期化などそれぞれ異なるのでいつも混乱してしまいます(^_^;)
今日はここまで。