实际项目开发中,我们经常会需要对系统的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.怎样扩展现有类功能?相关推荐

  1. C#中增量类功能的方式之 继承与扩展

    之前一次公司培训的时候,将它记录下来,https://www.cnblogs.com/AlvinLee/p/10180536.html这个博客上面比较全面. 1.扩展方法 扩展方法是一种特殊的静态方法 ...

  2. C++类功能扩展预留五招

    第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...

  3. Spring Boot2.0+中,自定义配置类扩展springMVC的功能

    在spring boot1.0+,我们可以使用WebMvcConfigurerAdapter来扩展springMVC的功能,其中自定义的拦截器并不会拦截静态资源(js.css等). @Configur ...

  4. 为ASP.NET MVC扩展异步Action功能(下)

    本文分为上下两部分,您也可以从<Extend ASP.NET MVC for Asynchronous Action>获得全部内容. 执行Action方法 对于执行同步Action的Syn ...

  5. C#中关于增强类功能的几种方式

    C#中关于增强类功能的几种方式 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能. 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用.方法的 ...

  6. 新型人工突触可用于高度扩展的类脑计算

    来源:科技日报 作者:张梦然 科技日报北京12月28日电 (记者张梦然)据最新一期美国化学会期刊<应用材料与界面>报道,新加坡科技与设计大学(SUTD)研究团队开发出一种基于二维(2D)材 ...

  7. 高度可扩展的类脑神经拟态硬件,完成了字母识别和人脸识别

    基于单晶体管的神经元和突触可大幅降低硬件成本,加速神经拟态硬件的商业化.研究人员使用标准硅 CMOS 工艺制造的单晶体管神经元和突触.它们共同集成在同一个8英寸晶圆片上. 韩国科学技术院(KAIST) ...

  8. [Google Guava] 2.4-集合扩展工具类

    原文链接 译文链接 译者:沈义扬,校对:丁一 简介 有时候你需要实现自己的集合扩展.也许你想要在元素被添加到列表时增加特定的行为,或者你想实现一个Iterable,其底层实际上是遍历数据库查询的结果集 ...

  9. swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类

    扩展第三方类 细心的朋友可能会发现,我们前面计算主角的大小用的总是同一方向第一帧纹理的大小,如果纹理大小有出入的话,会产生较大的偏差,最好的方法是取当前动画帧纹理的大小.不过这有些难度,所以我们退之求 ...

最新文章

  1. Rman--备份命令
  2. python开发桌面软件-python适合windows的桌面应用程序开发吗?
  3. Java Process中waitFor()的问题
  4. 【小马哥】Spring Boot系列讲座
  5. linux普通用户su root切换提示没有文件或目录
  6. java web 基础框架搭建_JavaWeb之搭建自己的MVC框架(一)
  7. Java程序性能优化
  8. 需要实战项目的看过来: 黑马最新java《十次方》社交项目 请仔细看!
  9. PX4开发环境搭建--模拟器编译及QGroundControl RC遥控模拟配置
  10. PHP连接mysql原生代码
  11. win11自带的照片查看器无法打印问题解决
  12. 数据挖掘工具主要有哪几种?
  13. JAVA对接语音验证码接口API
  14. win10安装双系统ubuntu
  15. 2.3 zio入门——一些常见的zio操作符
  16. 2.5 新建一个工程
  17. Java 下载 Excel模板时,报修正 Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?如果信任此工作簿的来源,请点击是
  18. 微服务(四)——统一网关
  19. 中国保险中介行业市场规模调研及投资可行性研究报告2022-2027年
  20. cocos2dx 网上资源

热门文章

  1. 【ES6专栏】全面解析ECMAScript 6模块系统
  2. 利用FS寄存器获取KERNEL32.DLL基址算法的证明
  3. 低版本ulibc支持recvmmsg sendmmsg功能
  4. pom.xml配置文件中所有标签及作用简单描述
  5. Java8新特性之函数式接口
  6. 日常生活小技巧 -- markdown编辑器
  7. 详细介绍Linux硬盘挂载步骤
  8. Nand Flash基础知识与坏块管理机制的研究
  9. linux下调试thread 类_在 RISC-V 芯片 GD32V 上运行 RT-Thread
  10. Bit-Z为什么成为熊市之光?