Storyboardを使用しないでアプリを準備する(Swift3)。

swift xcode Swift3 iOS

Posted on 2017-02-24


Storyboardを使用しないSwiftでアプリを準備する。

以前書いた記事からiOS 10 SDKになってアップデートしないといけないところとなります。
SDKの10からAppDelegate.swiftでの記述が変わったようですね(Swiftだけの記述になってますがObjective-cでも変わっているはず)。
Storyboardを使わないでViewControllerを呼び出す場合、変更されたapplicationメソッドを使えばまぁいけるわけです。
引数launchOptionsの記述方法が変わったんですね。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?
  var navigationController: UINavigationController?

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()
    let viewController = ViewController()
    navigationController = UINavigationController(rootViewController: viewController)
    window?.rootViewController = navigationController
    return true
  }

  func applicationWillResignActive(_ application: UIApplication) {
  }

  func applicationDidEnterBackground(_ application: UIApplication) {
  }

  func applicationWillEnterForeground(_ application: UIApplication) {
  }

  func applicationDidBecomeActive(_ application: UIApplication) {
  }

  func applicationWillTerminate(_ application: UIApplication) {
  }

}

何も考えずに以前のままのソースをまるっとコピーして使おうとすると注意されました。 以下のような感じでprivateアクセス修飾子をつけろっていわれて、はいはいつけますよってつけるとまぁapplicationメソッドは呼ばれなくなりますわな。 でだったらどうするのよってことでXcodeのアドバイスのままにapplicationDidFinishLaunchingメソッドを追記したらそちらが呼ばれるようになります。 どちらがいいかは好みの分かれるところかと思いますね。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?
  var navigationController: UINavigationController?

  private func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    return true
  }

  func applicationDidFinishLaunching(_ application: UIApplication) {
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()
    let viewController = ViewController()
    navigationController = UINavigationController(rootViewController: viewController)
    window?.rootViewController = navigationController
  }

  func applicationWillResignActive(_ application: UIApplication) {
  }

  func applicationDidEnterBackground(_ application: UIApplication) {
  }

  func applicationWillEnterForeground(_ application: UIApplication) {
  }

  func applicationDidBecomeActive(_ application: UIApplication) {
  }

  func applicationWillTerminate(_ application: UIApplication) {
  }

}

shigeki.takeguchi

渋谷の某ソーシャルゲームの会社でフロントエンドエンジニアとして働いてます。20世紀よりウェブ業界。気づいたらアラフィフ業界人。

By year

  1. 2017 (7)
  2. 2016 (23)
  3. 2015 (13)
  4. 2013 (15)
  5. 2012 (21)
  6. 2011 (34)

© 2012 shigeki.takeguchi