runtime 簡單使用

import UIKit

class User: NSObject,NSCopying,NSCoding {

var name = ""
var age = 0

required override init() {
    
}

required init?(coder aDecoder: NSCoder) {
    super.init();
    var count:UInt32 = 0;
    let list = class_copyPropertyList(User.self, &count)
    for i:Int in 0..<Int(count) {
        let property = list![i]
        let key = String.init(cString: property_getName(property))
        self .setValue(aDecoder.decodeObject(forKey: key), forKey: key)
    }
}

func encode(with aCoder: NSCoder) {
    var count:UInt32 = 0;
    let list = class_copyPropertyList(User.self, &count)
    for i:Int in 0..<Int(count) {
        let property = list![i]
        let key = String.init(cString: property_getName(property))
        aCoder .decodeObject(forKey: key)
    }
}
func copy(with zone: NSZone? = nil) -> Any {
    let copyObj = self
    return copyObj
}

override func mutableCopy() -> Any {
    let copyObj = type(of: self).init()
    var count:UInt32 = 0
    let list:UnsafeMutablePointer = class_copyPropertyList(User.self, &count)!
    for i:Int in 0..<Int(count) {
        let property:objc_property_t = list[i]!
        let key = String(cString: ivar_getName(property))
        let obj = self .value(forKey: key)
        copyObj.setValue(obj, forKey: key)
    }
    return copyObj
}

}

我寫了個swift 3 的 ,不知道有沒有問題,有問題可以幫我指出來,謝謝

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 首先介紹一下本文的目錄結構 一.Runtime認識 通常我們向一個類或者對象發送一個方法如:[object mes...
    hj的簡書閱讀 559評論 0 1
  • runtime簡單使用之給系統類動態添加屬性 前言 1, 給類動態添加屬性,實質就是讓一個屬性與某個對象產生關聯的...
    Alexander閱讀 2,715評論 2 3
  • 一、 發送消息 開發使用場景:調用未暴露的方法,前提條件,這個方法已經實現 導入#import <objc/mes...
    青椒辣不辣閱讀 481評論 0 0
  • ios runtime 然后我們打開終端,在命令行找到cd到文件目錄,然后中輸入: clang -rewrite-...
    人生路02閱讀 1,004評論 0 2
  • 通常,我們以[object message]這種方式向一個類或者對象發送一個未定義消息時,在Xcode編譯的時候就...
    hj的簡書閱讀 312評論 0 1