Swift extension详解

Swift extension详解,第1张

概述OC_category和Swift extension 在 Objective-C 中,我们有 .h 文件和 .m 文件。同时管理这两个文件(以及在工程中有双倍的文件)是一件很麻烦的事情,好在我们只要快速浏览 .h 文件就可以知道这个类对外暴露的 API,而内部的信息则被保存在 .m 文件中。在 Swift 中,我们只有一个文件。 为了一眼就看出一个 Swift 类的公开方法(可以被外部访问的方法

OC_category和Swift extension

在 Objective-C 中,我们有 .h 文件和 .m 文件。同时管理这两个文件(以及在工程中有双倍的文件)是一件很麻烦的事情,好在我们只要快速浏览 .h 文件就可以知道这个类对外暴露的 API,而内部的信息则被保存在 .m 文件中。在 Swift 中,我们只有一个文件。
为了一眼就看出一个 Swift 类的公开方法(可以被外部访问的方法),我们可以把内部实现都写在一个私有的 extension 中。

//可以扩展类型时,让类型遵守协议extension VIEwController: UItableVIEwDelegate{    internal func tableVIEw(_ tableVIEw: UItableVIEw,dIDSelectRowAt indexPath: IndexPath) {        print("the index is \(indexPath.row)");    }}private extension VIEwController{    //不对外暴露的函数和属性}
//// VIEwController.m// test_extension_01//// Created by jeffasd on 17/6/20.// copyright © 2017年 jeffasd. All rights reserved.//#import "VIEwController.h"static Nsstring *const kCellIDentifIEr = @"kCellIDentifIEr";@interface VIEwController ()<UItableVIEwDataSource,UItableVIEwDelegate>@property (nonatomic,strong) UItableVIEw *tableVIEw;@end@implementation VIEwController- (voID)vIEwDIDLoad {    [super vIEwDIDLoad];    [self.vIEw addSubvIEw:self.tableVIEw];}- (voID)touchesBegan:(NSSet<UItouch *> *)touches withEvent:(UIEvent *)event{    VIEwController *mainVC = [VIEwController new];    [self.navigationController pushVIEwController:mainVC animated:YES];}- (NSInteger)tableVIEw:(UItableVIEw *)tableVIEw numberOfRowsInSection:(NSInteger)section{    return 2;}- (UItableVIEwCell *)tableVIEw:(UItableVIEw *)tableVIEw cellForRowAtIndexPath:(NSIndexPath *)indexPath{    UItableVIEwCell *cell = [tableVIEw dequeueReusableCellWithIDentifIEr:kCellIDentifIEr forIndexPath:indexPath];    cell.textLabel.text = @"hello world";    return cell;}- (UItableVIEw *)tableVIEw{    if (_tableVIEw == nil) {        CGRect frame = (CGRect){0,128,self.vIEw.frame.size.wIDth,self.vIEw.frame.size.height - 64};        _tableVIEw = [[UItableVIEw alloc] initWithFrame:frame style:UItableVIEwStylePlain];        _tableVIEw.delegate = self;        _tableVIEw.dataSource = self;        [_tableVIEw registerClass:[UItableVIEwCell class] forCellReuseIDentifIEr:kCellIDentifIEr];    }    return _tableVIEw;}- (voID)dIDReceiveMemoryWarning {    [super dIDReceiveMemoryWarning];    // dispose of any resources that can be recreated.}@end@interface UIVIEwController (Jeffasd)@end@implementation UIVIEwController (Jeffasd)- (voID)tableVIEw:(UItableVIEw *)tableVIEw dIDSelectRowAtIndexPath:(NSIndexPath *)indexPath{    printf("tablevIEw");}@end

Swift实现

//// VIEwController.swift// test_swift_tableVIEw_02//// Created by jeffasd on 17/6/20.// copyright © 2017年 jeffasd. All rights reserved.//let kCellIDentifIEr = "cellIDentifIEr"import UIKitclass VIEwController: UIVIEwController,UItableVIEwDataSource {    //fileprivate weak var tableVIEw: UItableVIEw!    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        vIEw.addSubvIEw(self.tableVIEw)    }    overrIDe func touchesBegan(_ touches: Set<UItouch>,with event: UIEvent?) {        //let mainVC: MainVIEwController = MainVIEwController()        let mainVC: VIEwController = VIEwController()        navigationController?.pushVIEwController(mainVC,animated: true)    }    fileprivate lazy var tableVIEw: UItableVIEw = {        let frame: CGRect = CGRect(x: 0,y: 128,wIDth: self.vIEw.frame.wIDth,height: self.vIEw.frame.height - 64)        let tableVIEw: UItableVIEw = UItableVIEw(frame: frame,style: UItableVIEwStyle.plain)        tableVIEw.delegate = self        tableVIEw.dataSource = self        tableVIEw.register(UItableVIEwCell.classForCoder(),forCellReuseIDentifIEr: kCellIDentifIEr)        return tableVIEw    }()    func tableVIEw(_ tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {        return 2    }    func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        let cell: UItableVIEwCell = tableVIEw.dequeueReusableCell(withIDentifIEr: kCellIDentifIEr,for: indexPath)        cell.textLabel?.text = "hello world"        return cell    }    overrIDe func dIDReceiveMemoryWarning() {        super.dIDReceiveMemoryWarning()        // dispose of any resources that can be recreated.    }}extension VIEwController: UItableVIEwDelegate{    internal func tableVIEw(_ tableVIEw: UItableVIEw,dIDSelectRowAt indexPath: IndexPath) {        print("the index is \(indexPath.row)");    }}
总结

以上是内存溢出为你收集整理的Swift extension详解全部内容,希望文章能够帮你解决Swift extension详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1061742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存