Swift动态获取成员变量及对象关联

1.动态获取成员变量,以tabBarItem.badgeValue为例,由于Oc中的写法和Swift中的写法类似,这里就不写Oc的Demo了

self.tabBarItem.badgeValue = "10"
//拿到显示badgeValue的控件
//1拿到tabbar
for tabBarChild in self.tabBarController!.tabBar.subviews {
    //拿到UITabBarButton
    if tabBarChild.isKindOfClass(NSClassFromString("UITabBarButton")!) {    
        for tabBarButtonChild in tabBarChild.subviews {
            //拿到_UIBadgeView
            if tabBarButtonChild.isKindOfClass(NSClassFromString("_UIBadgeView")!) {
                for badgeViewChild in tabBarButtonChild.subviews {
                    if badgeViewChild.isKindOfClass(NSClassFromString("_UIBadgeBackground")!) {
                        printLog("哈哈,终于拿到你了")
//                                badgeViewChild.backgroundColor = UIColor.orangeColor()        
                        var count: UInt32 = 0
                        //获取到类身上的实例变量,也叫成员变量
                        let ivars = class_copyIvarList(NSClassFromString("_UIBadgeBackground"), &count)
                        for i in 0..<count {
                            //取某一个实例变量
                            let ivar = ivars[Int(i)]
                            //获取ivar的名称
                            let ivarName = NSString(CString: ivar_getName(ivar), encoding: NSUTF8StringEncoding)
                            //获取ivar的类型
                            let ivarType = NSString(CString: ivar_getTypeEncoding(ivar), encoding: NSUTF8StringEncoding)
                            printLog("name=\(ivarName);;type=\(ivarType)")
                            if ivarName!.isEqualToString("_image") {
                                badgeViewChild.setValue(UIImage(named: "main_badge"), forKeyPath: (ivarName! as String))
                            }
                        }   
                    }
                }
            }
        }
    }
}



2.对象关联,还是以item为例,动态给item绑定一个属性index

2.1Swift写法

    *对象关联:把一个对象A通过一个key关联到对象B身上去.而我们要从B身上取这个对象的话,就可以通过这个key
        //定义一个对象关联的key
        private var TABBAR_INDEX_KEY = UnsafePointer<Void>()
        *存:objc_setAssociatedObject(item, &TABBAR_INDEX_KEY, NSNumber(integer: index), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
        *取:let result = objc_getAssociatedObject(item, &TABBAR_INDEX_KEY)
2.2Oc中的写法

Oc中需要导入头文件,在设置一个字符串就可以了

#import <objc/runtime.h>
    objc_setAssociatedObject(self, @"hehe", [NSNumber numberWithInt:1], OBJC_ASSOCIATION_ASSIGN);
    objc_getAssociatedObject(self, @"hehe");





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值