swift. 扩展类添加属性_swift 扩展属性的方法
原理:由于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 扩展属性的方法相关推荐
- swift. 扩展类添加属性_Swift中用到extension的一些基本的扩展功能讲解
现有的类,结构或枚举类型的功能可以在扩展的帮助下加入.类型的功能可以使用扩展加入,但重写的功能不能使用扩展. Swift 扩展功能: 添加计算属性并计算类型属性 定义实例和类型的方法 提供了新的初始化 ...
- swift. 扩展类添加属性_swift中的声明关键字详解
原起 学习swift,swift中的关键字当然要了解清楚了,最近在网上看到了关于声明关键字的文章,整理记录一下. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...
- swift. 扩展类添加属性_Swift快速为类扩展属性
在程序编写过程中,我们常常需要为已有的类扩展新的属性.通常我们的解决办法是先声明一个Key,然后使用objc_getAssociatedObject 和 objc_setAssociatedObjec ...
- django class类即视图类添加装饰器的几种方法
根据别人发布整理,个人爱好收集(原文:https://blog.csdn.net/mydistance/article/details/83958655 ) 一.定义视图类 定义类视图,且类视图继承自 ...
- swift. 扩展类添加属性_Swift iOS-如何动态地向现有类添加属性然后访问它们
I need to dynamically add properties to an existing class then access them. I found this answer usin ...
- centos 7 php 扩展,centos7添加php7 oracel扩展
一.安装Oracle Clientyum -y install gcc 下载instantclient 这里我选择的12.2 开始安装,执行命令 rpm -ivh oracle-instantclie ...
- jango-简单的mixin扩展类
介绍 关于mixin,mix in是一种提供基础口味的冰淇淋(如香草,巧克力),可以往上添加坚果,饼干等.mixin作为扩展类通常用于多继承问题.多继承是Python语言的特色.一般通过继承或重写来使 ...
- 扩展方法必须在非泛型静态类中定义_第11篇:Cython面向对象编程--扩展类的实例化...
我们前篇谈到了Cython的访问控制,并且谈论了cdef class关键字的底层操作,顺带也谈论了Python类为什么会比Cython类慢的原因.本篇我们将介绍Cython扩展类的初始化 Cython ...
- Visual Studio扩展工具添加与卸载
简介:vs 作为主流的开发工具之一,其强大的功能无可厚非,但日益增加的需求就使得vs的扩展工具成为优秀dev所必备的利器之一. Visual Studio扩展工具添加 Visual Studio扩展工 ...
- Dubbo SPI机制(上):一个普通的扩展类是如何加载的
这一篇我们先不讲Dubbo中的具体业务逻辑,我们来打基础,聊一聊Dubbo中的SPI机制. Dubbo SPI是干啥的 了解一个技术,得先知道它是为了解决什么问题而产生的.那么Dubbo SPI是干什 ...
最新文章
- 才知道创建数据表的后面int(M)的m居然和存储大小没有关系
- GWPY:利用公开的 LIGO 数据进行绘图
- 大数据概述 ——林子雨老师第一课
- Spring Boot和数据库初始化
- 如何通过命令终端访问本地/局域网/远程的MySQL数据库_访问数据库_连接数据库_登录数据库
- python json.dumps 中的ensure_ascii 参数引起的中文编码问题
- opengl png图片 qt_QT中使用OpenGL绘图
- java panel画椭圆_如何在Java 2D中绘制椭圆?
- antd的select的滚动条怎么才会出现_纵向滚动条对横向滚动条的影响
- linux 怎么添加文件类型,如何在Linux/Unix上添加基于文件类型的文件扩展名?
- iphone配置实用工具出错解决
- 基于阿里开源的COLA架构和DDD领域驱动设计构建货物运输系统
- 梦参老和尚:糊涂人念〈大悲咒〉往生的故事
- hdu 1862 EXCEL排序
- 桥本分数c语言,桥本分数式问题的C++算法
- iOS开发者Matt Gemmell谈iOS 7
- [JavaSE] 数据类型(变量、整形、长整型、双精度浮点、单精度浮点、字符、字节)
- 解决 plt.savefig() 生成空白图片的问题
- 解决 error: called object ‘xxx‘ is not a function or function pointer
- sql-索引的作用(超详细),索引用法教程
热门文章
- 阶段3 2.Spring_05.基于XML的IOC的案例1_1 基于XML的IOC的案例-案例准备
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_4 Mybatis中使用Dao实现类的执行过程分析-查询方法...
- 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_15_注解_自定义注解_属性定义...
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_6_Lambda表达式有参数有返回值的...
- 笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
- MySQL中数据表的查操作
- javascript 下 function 和 Function的区别
- 动产抵押物监控系统/金融抵押监控系统设计与实现
- 学习用MaxScipt批处理Max文件
- ORACLE lag,lead