Swift专题讲解二十——扩展

前端之家收集整理的这篇文章主要介绍了Swift专题讲解二十——扩展前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Swift专题讲解二十——扩展

一、简介

Swift中的扩展与Objective-C中的类别功能相似,扩展可以为一个已有的类、结构体、枚举或者协议添加新的属性方法,与Objective-C的类别不同的是,Swift中的扩展没有名称

Swift中的扩展支持如下功能

1.添加计算属性

2.定义实例方法和类型方法

3.定义新的构造方法

4.定义下标方法

5.定义嵌套类型

6.使一个已有的类遵守协议

7.对协议进行扩展添加新的方法

二、使用扩展添加计算属性

使用extension来声明扩展,示例代码如下:

  1. //创建一个类 有两个属性
  2. class MyClass {
  3. var name:String
  4. var age:Int
  5. init(){
  6. name = "HS"
  7. age = 24
  8. }
  9. }
  10. //为MyClass类扩展一个计算属性
  11. extension MyClass {
  12. var nameAndAge:String{
  13. return "\(name)"+"\(age)"
  14. }
  15. }
  16. var obj = MyClass()
  17. obj.nameAndAge

三、使用扩展添加构造方法

需要注意的是,扩展不能为类添加指定构造方法,只可以为其添加便利构造方法,示例代码如下:

  1. //创建一个类 有两个属性
  2. class MyClass {
  3. var name:String
  4. var age:Int
  5. init(){
  6. name = "HS"
  7. age = 24
  8. }
  9. }
  10. extension MyClass{
  11. convenience init(name:String,age:Int){
  12. self.init()
  13. self.name=name
  14. self.age=age
  15. }
  16. }
  17. var obj2 = MyClass(name: "ZYH",age: 24)

四、使用扩展添加实例方法与类型方法

扩展可以为一个类型添加实例方法与类型方法,示例如下:

  1. //创建一个类 有两个属性
  2. class MyClass {
  3. var name:String
  4. var age:Int
  5. init(){
  6. name = "HS"
  7. age = 24
  8. }
  9. }
  10.  
  11. extension MyClass{
  12. func logName() -> String {
  13. print(name)
  14. return name
  15. }
  16. class func logClassName(){
  17. print("MyClass")
  18. }
  19. }
  20.  
  21. var obj3 = MyClass()
  22. obj3.logName()
  23. MyClass.logClassName()

对于值类型的扩展,可以使用可变方法修改实例本身,示例如下:

  1. extension Int{
  2. //修改本身需要使用nutating
  3. mutating func change() {
  4. self = self*self
  5. }
  6. }
  7. var count = 3
  8. count.change()
  9. //打印9
  10. print(count)

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

猜你在找的Swift相关文章