博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
29.怎样扩展现有类功能?
阅读量:6837 次
发布时间:2019-06-26

本文共 2229 字,大约阅读时间需要 7 分钟。

  实际项目开发中,我们经常会需要对系统的UI控件等进行封装,以达到统一修改、重复代码少、复用性高等效果。OC中,我们一般通过Category来给现有类添加方法;而在Swift中,我们使用来扩展现有类的功能。

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) in                    constraints!(make);                })            }        }                return label;    }}

  【注意】:需要注意一下这里的方法参数,都是可选类型,并赋了默认值,这意味着在调用的时候可以不用传递该参数。

2.示例说明

  • 上面的封装提供统一的创建UILabel方法;
  • GofConstraintMaker的定义可查看内容,需要添加;
  • 使用方式如下:
//完整参数调用        let label1 = UILabel.gof_labelWithText("完整调用", textColor: gof_ColorWithHex(0xff0000), font: kBodyFont, superView: self.view) { (make) in            make.left.top.equalTo(10);            make.right.equalTo(-10);            make.height.equalTo(30);        }                //没有字体颜色参数        let label2 = UILabel.gof_labelWithText("没有字体颜色", font: kNavFont, superView: self.view) { (make) in            make.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) in            make.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

你可能感兴趣的文章
LVM逻辑卷管理
查看>>
android webview 加载图片过大
查看>>
CISCO动态VLAN配置
查看>>
ExtJs_关于combobox的那些分页二三事
查看>>
css
查看>>
import static和import的区别
查看>>
数据结构树(二叉树的使用)
查看>>
OSPFv3与OSPF的配置
查看>>
傻瓜式的ARP处理方法
查看>>
Django1.4 python2.7 apache mod_python 安装与部署实例
查看>>
Fedora下的远程桌面连接
查看>>
浅析MySql二进制日志的应用
查看>>
您需要搭建怎样的网站来帮助您赚取更多利润?
查看>>
Ubuntu安装Cairo-Dock后,不能使用注销按钮和关机按钮
查看>>
SQL Server 2012 AlwaysOn Group 使用 Identity字段注意事项
查看>>
tcc新的插装引擎对比原有实现的改进
查看>>
20145328 《信息安全系统设计基础》第3周学习总结
查看>>
layoutSubviews何时调用的问题
查看>>
编译bash实现history的syslog日志记录
查看>>
Java数据类型
查看>>