美文网首页
Extension给已有类添加属性③

Extension给已有类添加属性③

作者: 三分慢先森 | 来源:发表于2016-09-22 18:01 被阅读54次

    给PHAsset类扩展一个 sizeString 的存储属性

    import Foundation
    import Photos
    
    extension PHAsset{
        
        private struct AssociatedKeys{
            static var sizeString : String?
        }
        
        var sizeString : String? {
            get {
                //根据关键字返回给定对象的值
                return objc_getAssociatedObject(self, &AssociatedKeys.sizeString) as? String
            }
            set {
                if let newValue = newValue  { 
                    //设置给定对象的值为 newValue  
                    objc_setAssociatedObject(self, &AssociatedKeys.sizeString, newValue as String?, objc_AssociationPolicy.OBJC_ASSOCIATION_COPY_NONATOMIC)
                }
            }
        }
        
    }
    

    *** objc_setAssociatedObject 的四个参数:源对象,关键字,关联的对象 (newValue也就是你设置的值) 和一个关联策略(要深究的话点进去看官方注释)***

    ***关于 objc_AssociationPolicy,它是一个枚举:***
    
    OBJC_ASSOCIATION_ASSIGN  等价  @property(assign)
    
    OBJC_ASSOCIATION_RETAIN_NONATOMIC  等价  @property(nonatomic,strong)  
        
    OBJC_ASSOCIATION_COPY_NONATOMIC  等价  @property(nonatomic,copy)
        
    OBJC_ASSOCIATION_RETAIN  等价  @property(atomic,strong)
        
    OBJC_ASSOCIATION_COPY  等价  @property(atomic,copy)
    

    相关文章

      网友评论

          本文标题:Extension给已有类添加属性③

          本文链接:https://www.haomeiwen.com/subject/mfizettx.html