読者です 読者をやめる 読者になる 読者になる

【swift】画面遷移でパラメータを引き継ぐ方法

やりたかったこと

webというか(php)でいえば、$_GET、$_POSTでパラメータで画面間でパラメータを引き回す方法をメモ。

実装

たいていの画面で画面遷移はあるので、BaseViewControllerみたいのをつくって共通の関数を用意しておくと楽だとおもいました

AppDelegate.swift

// パラメータ
var params: Dictionary<String, AnyObject> = Dictionary<String,AnyObject>()
var dictParams: Dictionary<String, Dictionary<String,AnyObject>> = Dictionary<String, Dictionary<String,AnyObject>>()
var arrDictParams: Dictionary<String, [Dictionary<String,AnyObject>]> = Dictionary<String,[Dictionary<String,AnyObject>]>()

BaseViewController.swift

/**
 * 画面間パラメータ設定
 */
// パラメータが文字列
func _setParam(key: String, string: String) {
   var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.params[key] = string
}

// パラメータが文字列の配列
func _setParam(key: String, stringArray: [String]) {
    var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.params[key] = stringArray
}

// パラメータが連想配列    
func _setParam(key: String, dictionaries: [Dictionary<String,AnyObject>]) {
    var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.arrDictParams[key] = dictionaries
}

// パラメータが連想配列の配列
func _setParam(key: String, dictionary: Dictionary<String,AnyObject>) {
    var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.dictParams[key] = dictionary
}

/**
 * 画面間パラメータ取得
 */
// パラメータが文字列
func _getParam(key: String) -> String {
    var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    var result: String? = appDelegate.params[key] as? String
    if result == nil {
        result = ""
    }
    return result!
}

// パラメータが連想配列
func _getParamDictionary(key: String) -> Dictionary<String,AnyObject> {
    var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    var result: Dictionary<String,AnyObject>?
    result = appDelegate.dictParams[key]
    if result == nil {
        result = Dictionary<String,AnyObject>()
    }
    return result!
}

// パラメータが連想配列の配列
func _getParamDictionaries(key: String) -> [Dictionary<String,AnyObject>] {
    var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    var result: [Dictionary<String,AnyObject>]?
    result = appDelegate.arrDictParams[key]
    if result == nil {
        result = [Dictionary<String,AnyObject>]()
    }
    return result!
}

とりあえずこれくらい用意しておいて自分的に困ることはありませんでした。

以上です