29.怎样扩展现有类功能?
实际项目开发中,我们经常会需要对系统的UI控件等进行封装,以达到统一修改、重复代码少、复用性高等效果。OC中,我们一般通过Category来给现有类添加方法;而在Swift中,我们使用Extension来扩展现有类的功能。
1.先看一个完整的扩展示例
import UIKitextension UILabel {/**创建UILabel- parameter text: 标题- parameter textColor: 标题颜色- parameter font: 标题字体- parameter superView: 父视图- parameter constraints: 约束- returns: UILabel*/static func gof_labelWithText(text: String? = nil, textColor:UIColor? = nil, font: UIFont? = nil, superView: UIView? = nil, constraints: GofConstraintMaker? = nil) -> UILabel{let label = UILabel();label.backgroundColor = kCColor;label.text = text ?? "";label.textColor = textColor ?? kBColor;label.font = font ?? kBodyFont;label.textAlignment = .Left;label.numberOfLines = 1;if superView != nil{superView?.addSubview(label);if constraints != nil{label.snp_makeConstraints(closure: { (make) inconstraints!(make);})}}return label;} }
【注意】:需要注意一下这里的方法参数,都是可选类型,并赋了默认值,这意味着在调用的时候可以不用传递该参数。
2.示例说明
- 上面的封装提供统一的创建UILabel方法;
- GofConstraintMaker的定义可查看第27章内容,需要添加SnapKit库;
- 使用方式如下:
//完整参数调用let label1 = UILabel.gof_labelWithText("完整调用", textColor: gof_ColorWithHex(0xff0000), font: kBodyFont, superView: self.view) { (make) inmake.left.top.equalTo(10);make.right.equalTo(-10);make.height.equalTo(30);}//没有字体颜色参数let label2 = UILabel.gof_labelWithText("没有字体颜色", font: kNavFont, superView: self.view) { (make) inmake.left.equalTo(10);make.right.equalTo(-10);make.top.equalTo(label1.snp_bottom).offset(10);make.height.equalTo(30);}//没有字体参数UILabel.gof_labelWithText("没有字体", textColor: gof_ColorWithHex(0x0000ff), superView: self.view) { (make) inmake.left.equalTo(10);make.right.equalTo(-10);make.top.equalTo(label2.snp_bottom).offset(10);make.height.equalTo(30);}
类似的,大家可以自己尝试实现其他常用控件的扩展。
转载于:https://www.cnblogs.com/LeeGof/p/5684635.html
29.怎样扩展现有类功能?相关推荐
- C#中增量类功能的方式之 继承与扩展
之前一次公司培训的时候,将它记录下来,https://www.cnblogs.com/AlvinLee/p/10180536.html这个博客上面比较全面. 1.扩展方法 扩展方法是一种特殊的静态方法 ...
- C++类功能扩展预留五招
第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...
- Spring Boot2.0+中,自定义配置类扩展springMVC的功能
在spring boot1.0+,我们可以使用WebMvcConfigurerAdapter来扩展springMVC的功能,其中自定义的拦截器并不会拦截静态资源(js.css等). @Configur ...
- 为ASP.NET MVC扩展异步Action功能(下)
本文分为上下两部分,您也可以从<Extend ASP.NET MVC for Asynchronous Action>获得全部内容. 执行Action方法 对于执行同步Action的Syn ...
- C#中关于增强类功能的几种方式
C#中关于增强类功能的几种方式 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能. 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用.方法的 ...
- 新型人工突触可用于高度扩展的类脑计算
来源:科技日报 作者:张梦然 科技日报北京12月28日电 (记者张梦然)据最新一期美国化学会期刊<应用材料与界面>报道,新加坡科技与设计大学(SUTD)研究团队开发出一种基于二维(2D)材 ...
- 高度可扩展的类脑神经拟态硬件,完成了字母识别和人脸识别
基于单晶体管的神经元和突触可大幅降低硬件成本,加速神经拟态硬件的商业化.研究人员使用标准硅 CMOS 工艺制造的单晶体管神经元和突触.它们共同集成在同一个8英寸晶圆片上. 韩国科学技术院(KAIST) ...
- [Google Guava] 2.4-集合扩展工具类
原文链接 译文链接 译者:沈义扬,校对:丁一 简介 有时候你需要实现自己的集合扩展.也许你想要在元素被添加到列表时增加特定的行为,或者你想实现一个Iterable,其底层实际上是遍历数据库查询的结果集 ...
- swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类
扩展第三方类 细心的朋友可能会发现,我们前面计算主角的大小用的总是同一方向第一帧纹理的大小,如果纹理大小有出入的话,会产生较大的偏差,最好的方法是取当前动画帧纹理的大小.不过这有些难度,所以我们退之求 ...
最新文章
- Rman--备份命令
- python开发桌面软件-python适合windows的桌面应用程序开发吗?
- Java Process中waitFor()的问题
- 【小马哥】Spring Boot系列讲座
- linux普通用户su root切换提示没有文件或目录
- java web 基础框架搭建_JavaWeb之搭建自己的MVC框架(一)
- Java程序性能优化
- 需要实战项目的看过来: 黑马最新java《十次方》社交项目 请仔细看!
- PX4开发环境搭建--模拟器编译及QGroundControl RC遥控模拟配置
- PHP连接mysql原生代码
- win11自带的照片查看器无法打印问题解决
- 数据挖掘工具主要有哪几种?
- JAVA对接语音验证码接口API
- win10安装双系统ubuntu
- 2.3 zio入门——一些常见的zio操作符
- 2.5 新建一个工程
- Java 下载 Excel模板时,报修正 Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?如果信任此工作簿的来源,请点击是
- 微服务(四)——统一网关
- 中国保险中介行业市场规模调研及投资可行性研究报告2022-2027年
- cocos2dx 网上资源