【swift】画面遷移をJLRoutesを使ってurlルーティングで管理 by web感覚
はじめに
webのフレームワークだと、アクセスされたurlを解析して対象のコントローラを呼び出すっていうのが一般的な処理の流れです。
iosアプリでも同じような形で実装できればコードの見通しがよくなると思って調べてみたのが今回の経緯でした。
で、調べてみるとJLRoutesというのが有名どころでありました
今回はこれを使った実装例をメモしておきます
導入方法(準備)
githubをみるとcocoapodsから導入できるぽいのですが、なぜかpod installしても処理が終わらないので、、、
今回は直接ダウンロードして使いました
Info.plistの編集
「Information Property List」の「URL types」の「URL Schemes」に「myapp」として追加(myappは例です)

実装方法
AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
・・・
// ルーティング処理
JLRoutes.addRoute("/:page") { (params: [NSObject : AnyObject]!) -> Bool in
let page = params["page"] as! String
// myapp://profile/*** (プロフィール画面を開きます)
if page == "profile"
{
let viewController: ProfileViewController = ProfileViewController()
viewController.params = params
self.navigationController?.pushViewController(viewController, animated: true)
}
// myapp://setting (設定画面を開きます)
else if page == "setting"
{
let viewController: SettingViewController = SettingViewController()
self.navigationController?.pushViewController(viewController, animated: true)
}
return true
}
return true
}
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return JLRoutes.routeURL(url)
}
呼び出し側のViewController
var url = "myapp://profile?id=99999" UIApplication.sharedApplication().openURL(NSURL(string: url))
呼び出される側のViewController
class ProfileViewController: UIViewController {
// urlパラメータ取得用
var params: AnyObject?
override func viewDidLoad() {
// self.params?["id"]でパラメータ取得
}