iOS開發(fā)之Swift一鍵Encode&Decode + 字典初始化模型

Git連接:https://github.com/BBHNation/EncodeModel
/*
* 新加入了Dic轉(zhuǎn)Model的功能谍咆,當(dāng)然是使用了Runtime來獲取dic信息匹配到Model中
*/

作用:

繼承BaseEncodeModel他膳,可以方便的歸檔解檔,不用一行一行寫歸檔代碼和解檔屬性配置。
繼承BaseEntity喝噪,可以在歸檔解檔前提下實現(xiàn)字典初始化。
Git中是一個EncodeModel啼染,作為基類琢岩,可以方便iOS中的Encode和Decode過程投剥。

源代碼:

import Foundation

class BaseEncodeModel : NSObject, NSCoding {
    override init() {}
    
    /// 獲取所有的屬性名字
    ///
    /// - Returns: 返回一個數(shù)組,帶有屬性名字
    func getPropertyNameList() -> [String] {
        var count : UInt32 = 0
        var names : [String] = []
        let properties = class_copyPropertyList(type(of: self), &count)
        guard let propertyList = properties else { return [] }
        for i in 0..<count {
            let property = propertyList[Int(i)]
            guard let char_b = property_getName(property) else {
                continue //到下一個循環(huán)
            }
            if let key = NSString(cString: char_b, encoding: String.Encoding.utf8.rawValue) as String? {
                names.append(key)
            }
        }
        return names
    }

/// 協(xié)議方法
///
/// - Parameter aCoder: 編碼
func encode(with aCoder: NSCoder) {
    let propertyList = getPropertyNameList()
    for p_name in propertyList {
        aCoder.encode(value(forKey: p_name), forKey: p_name)
    }
    print("encode successful")
}

/// 協(xié)議方法
///
/// - Parameter aDecoder: 解碼
required init?(coder aDecoder: NSCoder) {
    super.init()
    let propertyList = getPropertyNameList()
    for p_name in propertyList {
        let value = aDecoder.decodeObject(forKey: p_name)
        setValue(value, forKey: p_name)
    }
}

    /// 實例方法担孔,開始編碼
    ///
    /// - Parameter fileName: 文件名字
    func archive(fileName: String) {
        let filePath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last!
        let savePath = filePath + "/" + fileName + ".plist"
        NSKeyedArchiver.archiveRootObject(self, toFile: savePath)
    }
    
    /// 類方法江锨,開始解碼
    ///
    /// - Parameter fileName: 文件名字
    /// - Return: 返回一個實例,可以為空
    static func unarchive(fileName: String) -> Any? {
        let filePath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last!
        let savePath = filePath + "/" + fileName + ".plist"
        return NSKeyedUnarchiver.unarchiveObject(withFile: savePath)
    }
}

使用方法:

  • 第一步 需要類繼承于BaseEncodeModel
class Demo: BaseEncodeModel {
    var name : String = ""
    var age : Int = 0
    var gender : Bool = false
    var content : String = ""
}
  • 第二步 設(shè)置實例屬性糕篇,并使用實例方法來Encode
let demo = Demo.init()
demo.content = content.text!
demo.age = 22
demo.name = "BBH"
demo.gender = true
demo.archive(fileName: "helloFileName")
  • 第三步 使用類方法來Decode
 let demo = Demo.unarchive(fileName: "helloFileName") as? Demo
print("name:\(demo?.name ?? ""), age:\(demo?.age ?? 0), gender:\(demo?.gender ?? false)")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啄育,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拌消,更是在濱河造成了極大的恐慌挑豌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異氓英,居然都是意外死亡侯勉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門铝阐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來址貌,“玉大人,你說我怎么就攤上這事徘键×范裕” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵啊鸭,是天一觀的道長锹淌。 經(jīng)常有香客問我匿值,道長赠制,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任挟憔,我火速辦了婚禮钟些,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绊谭。我一直安慰自己政恍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布达传。 她就那樣靜靜地躺著篙耗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宪赶。 梳的紋絲不亂的頭發(fā)上宗弯,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機(jī)與錄音搂妻,去河邊找鬼蒙保。 笑死,一個胖子當(dāng)著我的面吹牛欲主,可吹牛的內(nèi)容都是我干的邓厕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼扁瓢,長吁一口氣:“原來是場噩夢啊……” “哼详恼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起引几,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤单雾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硅堆,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡屿储,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了渐逃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片够掠。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茄菊,靈堂內(nèi)的尸體忽然破棺而出疯潭,到底是詐尸還是另有隱情,我是刑警寧澤面殖,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布竖哩,位于F島的核電站,受9級特大地震影響脊僚,放射性物質(zhì)發(fā)生泄漏相叁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一辽幌、第九天 我趴在偏房一處隱蔽的房頂上張望增淹。 院中可真熱鬧,春花似錦乌企、人聲如沸虑润。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拳喻。三九已至,卻和暖如春猪腕,著一層夾襖步出監(jiān)牢的瞬間冗澈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工码撰, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留渗柿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓脖岛,卻偏偏與公主長得像朵栖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子柴梆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容