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..



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

2.1Swift写法

    *对象关联:把一个对象A通过一个key关联到对象B身上去.而我们要从B身上取这个对象的话,就可以通过这个key
        //定义一个对象关联的key
        private var TABBAR_INDEX_KEY = UnsafePointer()
        *存: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_setAssociatedObject(self, @"hehe", [NSNumber numberWithInt:1], OBJC_ASSOCIATION_ASSIGN);
    objc_getAssociatedObject(self, @"hehe");





你可能感兴趣的:(iOS开发,swift)