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详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)