Extension给已有类添加属性③

给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给已有类添加属性③)