extension的作用

一、在类中写

1. 比如在MainViewController类中,写一个extension 方法,这个方法里面尽量不要写成如下格式,因为会报错,找不到在clas

中创建的private lazy var 对象

// 相当于分类
extension MainTabBarController{
    private func setAddButton(){

        tabBar.addSubview(addBtn)

        // 3.设置位置
        addBtn.center =  CGPoint(x: tabBar.center.x, y: tabBar.bounds.size.height * 0.5)
    }

}

报错信息是:

Use of unresolved identifier ‘addBtn‘,

使用extension 的目的就是解耦合,但是当程序员这样写的时候,就会增加耦合,所以不建议这样写。

二、在类中可以使用extension来进行数据源的扩展

比如tableview,就可以使用这个进行扩展。代码如下:

// MARK:- tableView的数据源和代理方法
// extension类似OC的category,也是只能扩充方法,不能扩充属性
extension ViewController : UITableViewDataSource, UITableViewDelegate{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 1.创建cell
        let CellID = "CellID"
        var cell = tableView.dequeueReusableCell(withIdentifier: CellID)

        if cell == nil {
            // 在swift中使用枚举: 1> 枚举类型.具体的类型 2> .具体的类型
            cell = UITableViewCell(style: .default, reuseIdentifier: CellID)
        }

        // 2.给cell设置数据
        cell?.textLabel?.text = "测试数据:\((indexPath as NSIndexPath).row)"

        // 3.返回cell
        return cell!
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("点击了:\((indexPath as NSIndexPath).row)")
    }
}

三、 遍历构造函数

比如:UIButton.

可以创建一个类,把这个类的导入改成 : import UIKit

代码如下:

import UIKit

extension UIButton {

    // convenience : 便利,使用convenience修饰的构造函数叫做便利构造函数
    // 遍历构造函数通常用在对系统的类进行构造函数的扩充时使用
    /*
     遍历构造函数的特点
        1.遍历构造函数通常都是写在extension里面
        2.遍历构造函数init前面需要加载convenience
        3.在遍历构造函数中需要明确的调用self.init()
     */
    convenience init (imageName : String, bgImageName : String) {
        self.init()

        setImage(UIImage(named: imageName), forState: .Normal)
        setImage(UIImage(named: imageName + "_highlighted"), forState: .Highlighted)
        setBackgroundImage(UIImage(named: bgImageName), forState: .Normal)
        setBackgroundImage(UIImage(named: bgImageName + "_highlighted"), forState: .Highlighted)
        sizeToFit()
    }
}

四、其他:

import UIKit

extension UIButton {
    // swift中类方法是以class开头的方法.类似于OC中+开头的方法

    class func createButton(imageName : String, bgImageName : String) -> UIButton {
        // 1.创建btn
        let btn = UIButton()

        // 2.设置btn的属性
        btn.setImage(UIImage(named: imageName), forState: .Normal)
        btn.setImage(UIImage(named: imageName + "_highlighted"), forState: .Highlighted)
        btn.setBackgroundImage(UIImage(named: bgImageName), forState: .Normal)
        btn.setBackgroundImage(UIImage(named: bgImageName + "_highlighted"), forState: .Highlighted)
        btn.sizeToFit()

        return btn
    }
}
时间: 2024-10-11 13:12:36

extension的作用的相关文章

类目 (category),扩展(Extension)和协议(protocol) (转)

@类目-分类(category) 1.类目: 类目(也成类别:Category)是一种为现有类添加新方法的方式2.类目的局限性:1)类目无法向已有的类中添加实例变量: 2)如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优先级高,发生这种情况,则已有类的原始方法永无天日,最好的办法是将自己扩展的方法和原始方法区分开来. 3.类目的作用:?       将类的实现分散到多个不同的文件中–      将多个类目的声明放入同一个.h文件中–      将实现放入多个.m方法中?       使

obj-c9[[NSDate,{Category分类,Extension,管理'私有”方法,Protocol (协议)}]

#import <Foundation/Foundation.h>//#import "Person.h"#import "NSString+SayHiMessage.h"#import "NSMutableArray+ChangeArray.h" #import "NSString+ExchangeChineseToEnglish.h" #import "NSString+EmailValidation

swift 初步接触 基本语法 方法命名 (一)

今天研究了一下swift语言,随便找了小demo,一点研究swift语法精髓,整体下来感觉很舒服,就是了解语法废了些时间,我感觉swift语言初期很难了解,不过理解过了之后,你才能真正的体会到这个语言的方便之处,没有过多的累赘,这个语言还真的是门不错的语言,废话不多说,记录下自己的理解笔记,如果有什么不对的大家多多指教....... 这个是UIViewController实现代码 //导入框架 import UIKit //文件的入口,也就是主要编辑程序的地方 class ViewControl

【IOS 开发】Object - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射

一. Object-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, int, long, float, char, id, 指针 等数据; -- NSNumber 包装类 : 用于包装 C 语言数据类型; NSNumber 方法 : -- "+ numberWithXxx :" : 将特定类型的值包装成 NSNumber; -- "- initWithX

FreeSWITCH dialplan APPlication

以下为所有应用(Application)的一览表,点击对应的超链接进入源网站查看英文版本,若要看中文版本可往下拉按序查找.翻译不妥处请多多指教. A answer – 应答一个信道的呼叫 att_xfer – 可用于呼叫转移 B bind_digit_action – 绑定一个关键字队列或者一个正则表达式到一个action上 bind_meta_app – 在桥接或者执行另一个dialplan APP期间,对特定的呼叫leg上应答输入的DTMF按键序列 block_dtmf - Block DT

WatchKit-Programming-Guide-Apple-Watch开发指南官方翻译及总结

鉴于CSDN的Markdown很多bug,大家请看这里: WatchKit-Programming-Guide-Apple-Watch开发指南官方翻译及总结 Overview ### Developing for Apple Watch Apple Watch可以让用户以一种很私密,不招摇的样式查看信息(官方文档是这样的哈,但是我想大多数人不会不招摇的查看Apple Watch上的信息??).用户可以在不拿出手机的情况下,通过查看Apple Watch快速的获取重要的信息. Apple Watc

Atitit.获取主板与bios序列号获取硬件设备信息&#160;&#160;Wmi&#160;wmic&#160;的作用

Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用 1 获取硬件核心基础核心基础Wmi1 2 其他资料2 3 Wmic WMI 命令行接口2 4 Atitit.获取主板与bios序列号2 5 参考3 1 获取硬件核心基础核心基础Wmi WMI,是Windows 2K/XP管理系统的核心:对于其他的Win32操作系统,WMI是一个有用的插件.WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object 

SpringMVC中 -- @RequestMapping的作用及用法

一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置 <servlet> <servlet-name>servletName</servlet-name> <servlet-class>ServletClass</servlet-class> </servlet> <ser

Category、Extension

Category,分类,类目.主要作?用是为没有源代码的添加方法,例系统自带的NSString. 通过Category添加的方法会成为原类的一部分.从?而达到扩展一 个类的功能.   Category NSString+SayHi.h文件  @interface NSString (SayHi) - (void)hi;  @end /* 分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法  使用注意: 1.分类只能增加方法,不能增加成员变量 2.分类方法实现中可以访问原来类中声明的成员