swift-30运行时加载属性列表

我以前做的swift笔记, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以当做自己的一份文档.

image.png
image.png
//
//  Person.swift
//  14运行时加载属性列表

import UIKit

class Person: NSObject {
    var name: String?
    
    //基本数据类型 在oc中没有可选 如果定义可选 运行时同样获取不到 使用KVC 就会奔溃
    //var age: Int? 定义基本数据类型 运行时获取不到
    var age: Int = 0
    var title: String?
    
    class func propertyList() -> [String] {
        var count: UInt32 = 0
        
        //1 获取 类 的属性列表 返回属性列表的数组 可选项
        // 方法返回值为 UnsafeMutablePointer<objc_property_t?>?
        // 注意点 c语言 对象记得要释放
        // 获取 ivar 列表是所有第三方框架字典转模型的基础
        let list = class_copyPropertyList(self, &count)
        
        /**
        class_copyIvarList(<#T##cls: AnyClass!##AnyClass!#>, <#T##outCount: UnsafeMutablePointer<UInt32>!##UnsafeMutablePointer<UInt32>!#>)
        class_copyMethodList(<#T##cls: AnyClass!##AnyClass!#>, <#T##outCount: UnsafeMutablePointer<UInt32>!##UnsafeMutablePointer<UInt32>!#>)
        class_copyPropertyList(<#T##cls: AnyClass!##AnyClass!#>, <#T##outCount: UnsafeMutablePointer<UInt32>!##UnsafeMutablePointer<UInt32>!#>)
         */
        
        print("属性列表的数量 \(count)")
        
        //2 遍历数组
//        for i in 0..<Int(count) {
//            //3 根据下标获取属性
//            //objc_property_t?
//            let pty = list?[i]
//            
//            //4 获取属性 的名称 c语言字符串
//            // UnsafePointer<Int8>?
//            // Int8 -> Byte -> Char C语言的字符串
//            let cName = property_getName(pty!)
//            
//            //5 转换成 String 的字符串
//            let name = String(utf8String: cName!)
//            
//            print(name)
//        }
        
        //2 遍历数组
        for i in 0..<Int(count) {
            //3 根据下标获取属性
            // 使用 guard 语法 依次判断每一项是否有值 只要有一项为nil 就不要执行后续的代码
            guard let pty = list?[i],
                let cName = property_getName(pty),
                let name = String(utf8String: cName)
                
                else {
                //继续遍历下一个
                    continue
            }
            print(name)
        }
        //3 释放c语言的对象
        free(list)
        return []
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 最近被和颐酒店女生遇袭的事件刷屏了,网络上铺天盖地的是给说法和女生在遇到这种情况如何保护自己。不禁让我想到发小前段...
    看见大王还不跪阅读 184评论 0 0
  • 夜已经深了,睡意却没了,胃突然没有征兆的难受起来,难受的蜷起身子,开着暖风的空调也无法给我带来暖意,胃在抽搐着,这...
    武连珍阅读 293评论 0 0
  • 猫咪长得并不难看,但她有一个缺点,就是..她是一只灰灰猫,超人第一次见到她首先觉得这是一只丑丑的猫,猫咪也知道自己...
    猫咪猫咪超人呢阅读 287评论 0 0
  • 【R:阅读原文】 一阶段 片段 一:选自《非暴力沟通》 非暴力沟通强调,感受的根源在于我们自身。我们的需要和期待,...
    swwww阅读 146评论 2 0