swift扩展extension——swift学习(七)
来源:互联网 发布:手机印象笔记为知笔记 编辑:程序博客网 时间:2024/05/21 10:48
首先看到swift扩展的时候,我就想起了OC的扩展和类别;于是我就在找swift的扩展和OC的扩展和类别是什么关系。经过几番查阅资料,发现swift的扩展和OC的类别是如出一辙。但是我又很一根筋地去查找swift类似OC扩展的东西是什么。但是我始终就是没找到,于是我就静下来想想,OC的扩展和分类的作用和区别是什么?使用场景是什么?所以,我们首先来看看OC的类别和扩展:
类别:可以动态的为现有类添加新的方法
//接口文件@interface 已有类(类别名)//方法定义@end//实现部分@implementation 已有类(类别名)//方法实现@end
eg:#import <UIKit/UIKit.h>@interface UIColor (UIColorUInt32)+(UIColor *)colorWithHexString:(NSString *)valueStr;@end#import "UIColor+UIColorUInt32.h"@implementation UIColor (UIColorUInt32)+(UIColor *)colorWithHexString:(NSString *)valueStr{ NSScanner * scanner = [NSScanner scannerWithString:valueStr]; UInt32 hexStr = 0; if (![scanner scanHexInt:&hexStr]) { return [UIColor clearColor]; }else{ return [UIColor colorWithRed:(CGFloat)((hexStr&0xFF0000)>>16)/255.0 green:(CGFloat)((hexStr&0x00FF00)>>8)/255.0 blue:(CGFloat)((hexStr&0x0000FF))/255.0 alpha:(CGFloat)(1.0)]; }}@end
扩展:只是对某个类的接口进行扩展,这个是我们用的比较多的,一般我们习惯在.m文件中添加扩展。然后把一些私有的、不想让外部访问的接口和属性定义在这里。
@interface已有类 ()<代理>//定义变量//定义方法@endeg:#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic, copy)NSString * name;- (NSString *)getString;@end#import "Person.h"@interface Person()@property (nonatomic, assign) NSInteger age;- (void)walk;@end@implementation Person- (void)walk{ NSLog(@"walk...");}- (NSString *)getString{ return _name;}@end
OK,到这里,相信也有点感觉了,swift根本不需要类似OC扩展的东西。因为swift只有一个文件呀。它的所有的东西都在class内。所以,解掉了这个梗之后,我们就来看看swift的扩展吧。
和OC一样,我们选择iOS——>Source——>Swift File创建一个swift文件就可以了。
import Foundationimport UIKitextension UIColor{ convenience init(valueStr:String) { let scanner:NSScanner = NSScanner(string:valueStr) var valueRGB:UInt32 = 0 if scanner.scanHexInt(&valueRGB) == false { self.init(red: 0,green: 0,blue: 0,alpha: 0) }else{ self.init( red:CGFloat((valueRGB & 0xFF0000)>>16)/255.0, green:CGFloat((valueRGB & 0x00FF00)>>8)/255.0, blue:CGFloat(valueRGB & 0x0000FF)/255.0, alpha:CGFloat(1.0) ) } }}/*这里解释一下: NSScanner:这个类可以扫描字符串,从中挑选出我们需要的字符,方法scanHexInt(&valueRGB),可以扫描scanner的16进制的数据,并转换成10进制的数据复制给valueRGB。 convenience:便利初始化关键字。*///使用:self.view.backgroundColor = UIColor(valueStr:"ffffff");
不另外生成一个swift文件:
/* 1、删除一个bridging-header和头文件之后,应该在Building Setting -> Swift Compilier-Code Generation中的Objective-C Bridging Header中删除里面的bridge2、 extension: 扩展,3、 subscript: 下标脚本:对一个东西通过索引、快速取值的一种语法,例如数组a[0]。swift中,我们可以对类、结构体、枚举定义下标脚本。下标语法使用set、get来定义读、写属性,不需要两个都有;定义set属性时,传入的参数默认名称为newValue,4、 enumerate(): 字符自带函数,同时返回index以及数据 */import UIKitextension String{ subscript(start:Int,length:Int)->String{ get{ return (self as NSString).substringWithRange(NSRange(location: start,length: length)) } set{ let tmp = self var s = "" var e = "" for(idx,item)in tmp.characters.enumerate(){ if idx<start{ s += "\(item)" } if idx>=start+length{ e += "\(item)" } } self = s+newValue+e } } subscript(index:Int)->String{ get{ return String(self[self.startIndex.advancedBy(index)]) } set{ let tmp = self self = "" for(idx, item)in tmp.characters.enumerate(){ if idx == index{ self += "\(newValue)" }else{ self += "\(item)" } } } }}class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() var str = "fcf"// print("\(str[4,2])")//越界 print("\(str[2,1])") str[3,3] = "eng" print("\(str)") }}
ok,举的两个例子相信够去理解和使用了!
1 0
- swift扩展extension——swift学习(七)
- Swift学习笔试19——扩展(Extension)
- 五 Swift学习之扩展(Extension)
- Swift 系统学习 31 扩展 extension
- Swift扩展(Extension)
- Swift 扩展(extension)
- Swift UIColor Extension (扩展)
- swift中的extension(扩展)
- Swift Extension 扩展
- swift-Extension(扩展)
- Swift 中的扩展 (Extension)
- Swift入门教程15-扩展(extension)
- Swift - 类扩展(extension)
- Swift 扩展(Extension)总结
- Swift extension(扩展)的使用
- Swift学习——Swift基础详解(七)
- Swift学习这二十二:扩展(extension)
- Swift学习 下标脚本subscript和类扩展Extension
- 串行动画
- 值得推荐的C/C++框架和库[all]
- mysql-创建用户与授权
- Android 输入法弹出界面上移的问题
- mysql恢复
- swift扩展extension——swift学习(七)
- openwrt 编译驱动模块(在openwrt源代码外部任意位置编写代码,独立模块化编译.ko)
- inner join结果集不正确
- Logcat语法高亮显示:语法高亮显示为Android Logcat文件
- 小玩流媒体播放——HLS流媒体点播系统
- Android 压缩解压zip文件,包含子目录,中文目录不会乱
- gridView上拉刷新下拉加载
- Mybatis传多个参数
- 快速排序算法(Partition函数)分析与拓展