swift 笔记 (十八) —— 扩展
来源:互联网 发布:mac 安装android sdk 编辑:程序博客网 时间:2024/06/11 08:59
扩展
扩展可以让我们给一个已有的类、结构体、枚举等类型添加新功能,包括属性和方法,甚至是构造器,下标,支持协议等等。。。
甚至是我们拿不到源代码的类、结构体、枚举,我们依然可以给它加扩展。。。
看到这里的时候,我还有点小激动呢。。。可是淡定下来之后,觉得这TMD就是个大大的飞线,飞线,飞线。。。这让我们的代码难以理解全面(总要担心是不是哪里还有扩展,我没读到的。。谁会不会在哪写个飞线出来以达到他不可告人的秘密,所以我们不得不在“代码规范”里写:扩展必须紧挨着类的实现写。可是拿不代码的类呢?我们还要规定必须给文件名起一个类似xxxxExtensions.swift 或者 xxxxDelegate.swift 这样的名字。。。为何不让用户通过代理模式去做这样的事情,反而是提供了这样一个反代码反人类的特性。。。)
不管怎么说,既然提供了这样的东西,还是记录一下这个奇葩的方式吧。
语法:
extension MyClass {
//要扩展的属性,方法,等功能写在这里
}
extension MyClass: MyProtocol { //协议在后面的笔记里再说,这里只是提一下
//要扩展的属性,方法,等功能写在这里
}
扩展可以做的事儿:
1. 添加计算型属性和计算型静态属性
2. 定义实例方法和类型方法
3. 提供新的构造器
4. 定义下标
5. 定义和使用新的嵌套类型
6. 使一个已有的类型遵守某个协议
之前在写一个例子的时候,发现 Int没有toString方法,于是,我们借助扩展的强大功能,现在可以让Int有toString方法了:
extension Int {
func toString()->String {
var tmpArray = ["0","1","2","3","4"
,"5","6","7","8","9"]
var tmpNum = self
var tmpString = ""
while tmpNum > 0 {
tmpString = tmpArray[tmpNum % 10] + tmpString
tmpNum /= 10
}
return tmpString
}
}
var myNum:Int = 6234232
println(myNum.toString())
func toString()->String {
var tmpArray = ["0","1","2","3","4"
,"5","6","7","8","9"]
var tmpNum = self
var tmpString = ""
while tmpNum > 0 {
tmpString = tmpArray[tmpNum % 10] + tmpString
tmpNum /= 10
}
return tmpString
}
}
var myNum:Int = 6234232
println(myNum.toString())
注意:这只是个玩具(示例),如果用到项目中的话,请考虑更好的写法。
至于文档中提到的构造器,下标,mutating方法,嵌套类型,无非都是这样。。再简单不过,自己写着玩就好了。不列了。
0 0
- swift 笔记 (十八) —— 扩展
- 析构—Swift学习笔记(十八)
- Swift-扩展(Extensions)(十八)
- Swift学习笔记(十八)泛型
- UIColor扩展—Swift
- Swift学习笔记(十八)——字符串String.Index和Range详解
- Swift学习笔记(二十八)——Switch-Case的高级用法
- The Swift Programming Language学习笔记(十八)——可选链式调用
- Swift学习笔记系列——(20)扩展
- Swift学习笔记(二十六)——扩展
- Swift学习——A Swift Tour 协议和扩展
- swift扩展extension——swift学习(七)
- 《从零开始学Swift》学习笔记(Day 49)——扩展声明
- 《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法
- 《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
- The Swift Programming Language学习笔记(二十二)——扩展
- 《从零开始学Swift》学习笔记(Day 49)——扩展声明
- 《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法
- 黑马程序员_java 集合框架学习总结
- 移动开发工具
- 黑马程序员_java IO技术学习总结
- 程序员生存定律--管理向左,技术向右
- UEFI boot 和 Legacy boot 区别
- swift 笔记 (十八) —— 扩展
- LeetCode : Wildcard Matching
- linux下的编码命名
- OCP-1Z0-051 补充题库 第15题 子查询和join
- Hadoop之关键技术(四)--Zookeeper
- GPS天线类型和特点
- mysql默认编码设置
- 用友NC资产管理解决方案助机场行业盘活增效
- 招股书公信力遭质疑用友软件股价跌停