原理:由于swift扩展不能添加存储属性,所以考虑以计算属性获取另一对象的存储属性,该对象通过动态绑定给原对象

1,创建协议 包含中间对象,两个用于绑定的key

protocol AssociateObject {

var newInstance: AnyObject {get}

static var key:UnsafeRawPointer { get }      //key不要用String类型

static var midKey:UnsafeRawPointer { get }

}

2,创建空类,用于生成中间对象

3,协议扩展,实现中间对象,并绑定

extension AssociateObject {

var newInstance: AnyObject {

guard let obj = objc_getAssociatedObject(self, Self.key) else {

let newInstance = NewClass.init()

objc_setAssociatedObject(self, Self.key, newInstance, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)

return newInstance

}

return obj as AnyObject

}

}

4,类的扩展遵守协议,并给出两个key,然后把需要的属性绑定给中间对象

extension UIView:AssociateObject {

static var key = UnsafeRawPointer("UIViewEx")

static var midKey: UnsafeRawPointer = UnsafeRawPointer("UIViewMidKey")

varviewName:String{

get{

guardletvalue =objc_getAssociatedObject(newInstance, &UIView.midKey)  else{

returnString()

}

returnvalueas!String

}

set{

objc_setAssociatedObject(newInstance, &UIView.midKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)

}

}

}

swift. 扩展类添加属性_swift 扩展属性的方法相关推荐

  1. swift. 扩展类添加属性_Swift中用到extension的一些基本的扩展功能讲解

    现有的类,结构或枚举类型的功能可以在扩展的帮助下加入.类型的功能可以使用扩展加入,但重写的功能不能使用扩展. Swift 扩展功能: 添加计算属性并计算类型属性 定义实例和类型的方法 提供了新的初始化 ...

  2. swift. 扩展类添加属性_swift中的声明关键字详解

    原起 学习swift,swift中的关键字当然要了解清楚了,最近在网上看到了关于声明关键字的文章,整理记录一下. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...

  3. swift. 扩展类添加属性_Swift快速为类扩展属性

    在程序编写过程中,我们常常需要为已有的类扩展新的属性.通常我们的解决办法是先声明一个Key,然后使用objc_getAssociatedObject 和 objc_setAssociatedObjec ...

  4. django class类即视图类添加装饰器的几种方法

    根据别人发布整理,个人爱好收集(原文:https://blog.csdn.net/mydistance/article/details/83958655 ) 一.定义视图类 定义类视图,且类视图继承自 ...

  5. swift. 扩展类添加属性_Swift iOS-如何动态地向现有类添加属性然后访问它们

    I need to dynamically add properties to an existing class then access them. I found this answer usin ...

  6. centos 7 php 扩展,centos7添加php7 oracel扩展

    一.安装Oracle Clientyum -y install gcc 下载instantclient 这里我选择的12.2 开始安装,执行命令 rpm -ivh oracle-instantclie ...

  7. jango-简单的mixin扩展类

    介绍 关于mixin,mix in是一种提供基础口味的冰淇淋(如香草,巧克力),可以往上添加坚果,饼干等.mixin作为扩展类通常用于多继承问题.多继承是Python语言的特色.一般通过继承或重写来使 ...

  8. 扩展方法必须在非泛型静态类中定义_第11篇:Cython面向对象编程--扩展类的实例化...

    我们前篇谈到了Cython的访问控制,并且谈论了cdef class关键字的底层操作,顺带也谈论了Python类为什么会比Cython类慢的原因.本篇我们将介绍Cython扩展类的初始化 Cython ...

  9. Visual Studio扩展工具添加与卸载

    简介:vs 作为主流的开发工具之一,其强大的功能无可厚非,但日益增加的需求就使得vs的扩展工具成为优秀dev所必备的利器之一. Visual Studio扩展工具添加 Visual Studio扩展工 ...

  10. Dubbo SPI机制(上):一个普通的扩展类是如何加载的

    这一篇我们先不讲Dubbo中的具体业务逻辑,我们来打基础,聊一聊Dubbo中的SPI机制. Dubbo SPI是干啥的 了解一个技术,得先知道它是为了解决什么问题而产生的.那么Dubbo SPI是干什 ...

最新文章

  1. 才知道创建数据表的后面int(M)的m居然和存储大小没有关系
  2. GWPY:利用公开的 LIGO 数据进行绘图
  3. 大数据概述 ——林子雨老师第一课
  4. Spring Boot和数据库初始化
  5. 如何通过命令终端访问本地/局域网/远程的MySQL数据库_访问数据库_连接数据库_登录数据库
  6. python json.dumps 中的ensure_ascii 参数引起的中文编码问题
  7. opengl png图片 qt_QT中使用OpenGL绘图
  8. java panel画椭圆_如何在Java 2D中绘制椭圆?
  9. antd的select的滚动条怎么才会出现_纵向滚动条对横向滚动条的影响
  10. linux 怎么添加文件类型,如何在Linux/Unix上添加基于文件类型的文件扩展名?
  11. iphone配置实用工具出错解决
  12. 基于阿里开源的COLA架构和DDD领域驱动设计构建货物运输系统
  13. 梦参老和尚:糊涂人念〈大悲咒〉往生的故事
  14. hdu 1862 EXCEL排序
  15. 桥本分数c语言,桥本分数式问题的C++算法
  16. iOS开发者Matt Gemmell谈iOS 7
  17. [JavaSE] 数据类型(变量、整形、长整型、双精度浮点、单精度浮点、字符、字节)
  18. 解决 plt.savefig() 生成空白图片的问题
  19. 解决 error: called object ‘xxx‘ is not a function or function pointer
  20. sql-索引的作用(超详细),索引用法教程

热门文章

  1. 阶段3 2.Spring_05.基于XML的IOC的案例1_1 基于XML的IOC的案例-案例准备
  2. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_4 Mybatis中使用Dao实现类的执行过程分析-查询方法...
  3. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_15_注解_自定义注解_属性定义...
  4. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_6_Lambda表达式有参数有返回值的...
  5. 笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
  6. MySQL中数据表的查操作
  7. javascript 下 function 和 Function的区别
  8. 动产抵押物监控系统/金融抵押监控系统设计与实现
  9. 学习用MaxScipt批处理Max文件
  10. ORACLE lag,lead