2014年7月9日水曜日

Swift:AppDelegate.swiftの中身

前回の続き。。。

今回は「AppDelegate.swift」の中身を見ていきたいと思います。

--------------------------------------------------------------------------

//
//  AppDelegate.swift
//  HelloSwift
//
//  Created by  on 2014/07/01.
//  Copyright (c) 2014 . All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
                            
    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    func applicationWillResignActive(application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(application: UIApplication) {
        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    }

    func applicationDidBecomeActive(application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

    func applicationWillTerminate(application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }


}

--------------------------------------------------------------------------
全部で45行で見た目も短いし簡潔な感じです。

import文の後の「@UIApplicationMain」はObjective-C言語ではmain()関数内に記述していたプリミティブなんでSwiftになってmain()関数が無くなった代わりに必要となる記述なのでしょうね。

次にインスタンス変数の記述部分では。。。

(Objective-C言語での記述)
    UIWindow* window;

(Swift言語での記述)
    var window: UIWindow?

UIWindowクラスの変数windowが宣言されています。
C言語の分かりにくい点であったポインタが無くなったんでクラスインスタンスを入れる変数に必要だった「*」(ポインター)マークは記述不要になっています。

かわりに変な位置に「?」がありますがこれは結構重要で「?」マークを消すとコンパイルエラーになります。

Swift言語の特徴に「変数の初期化の強制」がありますので、初期化していないとコンパイル時に怒られます。
 └実際には「?」マークを消した瞬間にエラーとなります。

逆にこのwindow変数のように実行時にnibファイルが読み込まれた時に初めて生成されたUIWindowオブジェクト値が設定されるような変数ではnil値(初期化しない許可)を許可しておかないとコンパイルを通らないので、このようにnil値を許容させたい変数には宣言時に「?」マークを付与する必要があります。

やや面倒な感じもしますが、こうする事で変数の初期化を強制し想定外のバグやクラッシュを未然に防いでいるんでしょうね。

あとの行は見慣れたUIApplicationDelegateのデリゲートメソッド定義が生成されていますので、それぞれデリゲート内に必要な機能をコーディングすることになります。

クラス、メソッド、変数定義等、Swift言語独自のコーディングスタイルになっているので違和感はあるものの見慣れたメソッドとか変わってない点も多々あるなぁ〜って印象でしょうか。。。

ではまた〜

0 件のコメント:

コメントを投稿