欢迎光临
梦想从学习开始!

Swift 扩展 | 小熊教程

Swift 扩展

Tips:您正在学习的是Swift 扩展 | 小熊教程系列。本文链接https://www.xxfxb.com/?p=8602 ,您可通过标签查询系列课程。祝您学习愉快!

扩展就是向一个已有的类、结构体或枚举类型添加新功能。

扩展可以对一个类型添加新的功能,但是不能重写已有的功能。

Swift 中的扩展可以:

  • 添加计算型属性和计算型静态属性
  • 定义实例方法和类型方法
  • 提供新的构造器
  • 定义下标
  • 定义和使用新的嵌套类型
  • 使一个已有类型符合某个协议

语法

Tips:您正在学习的是Swift 扩展 | 小熊教程系列。本文链接https://www.xxfxb.com/?p=8602 ,您可通过标签查询系列课程。小熊分享邦(www.xxfxb.com)祝您学习愉快!

扩展声明使用关键字 extension

 extension SomeType {     // 加到SomeType的新功能写到这里 } 

一个扩展可以扩展一个已有类型,使其能够适配一个或多个协议,语法格式如下:

 extension SomeType: SomeProtocol, AnotherProctocol {     // 协议实现写到这里 } 

计算型属性

扩展可以向已有类型添加计算型实例属性和计算型类型属性。

实例

Tips:您正在学习的是Swift 扩展 | 小熊教程系列。本文链接https://www.xxfxb.com/?p=8602 ,您可通过标签查询系列课程。小熊分享邦(www.xxfxb.com)祝您学习愉快!

下面的例子向 Int 类型添加了 5 个计算型实例属性并扩展其功能:

 extension Int {    var add: Int {return self + 100 }    var sub: Int { return self - 10 }    var mul: Int { return self * 10 }    var div: Int { return self / 5 } }      let addition = 3.add print("加法运算后的值:/(addition)")      let subtraction = 120.sub print("减法运算后的值:/(subtraction)")      let multiplication = 39.mul print("乘法运算后的值:/(multiplication)")      let division = 55.div print("除法运算后的值: /(division)")  let mix = 30.add + 34.sub print("混合运算结果:/(mix)") 

以上程序执行输出结果为:

 加法运算后的值:103 减法运算后的值:110 乘法运算后的值:390 除法运算后的值: 11 混合运算结果:154 

构造器

扩展可以向已有类型添加新的构造器。

这可以让你扩展其它类型,将你自己的定制类型作为构造器参数,或者提供该类型的原始实现中没有包含的额外初始化选项。

扩展可以向类中添加新的便利构造器 init(),但是它们不能向类中添加新的指定构造器或析构函数 deinit() 。

 struct sum {     var num1 = 100, num2 = 200 }  struct diff {     var no1 = 200, no2 = 100 }  struct mult {     var a = sum()     var b = diff() }   extension mult {     init(x: sum, y: diff) {         _ = x.num1 + x.num2         _ = y.no1 + y.no2     } }   let a = sum(num1: 100, num2: 200) let b = diff(no1: 200, no2: 100)  let getMult = mult(x: a, y: b) print("getMult sum/(getMult.a.num1, getMult.a.num2)") print("getMult diff/(getMult.b.no1, getMult.b.no2)") 

以上程序执行输出结果为:

 getMult sum(100, 200) getMult diff(200, 100) 

方法

扩展可以向已有类型添加新的实例方法和类型方法。

下面的例子向Int类型添加一个名为 topics 的新实例方法:

 extension Int {    func topics(summation: () -> ()) {       for _ in 0..<self {          summation()        }    } }    4.topics({    print("扩展模块内")        })          3.topics({    print("内型转换模块内")        })   

以上程序执行输出结果为:

 扩展模块内 扩展模块内 扩展模块内 扩展模块内 内型转换模块内 内型转换模块内 内型转换模块内 

这个topics方法使用了一个() -> ()类型的单参数,表明函数没有参数而且没有返回值。

定义该扩展之后,你就可以对任意整数调用 topics 方法,实现的功能则是多次执行某任务:


可变实例方法

通过扩展添加的实例方法也可以修改该实例本身。

结构体和枚举类型中修改self或其属性的方法必须将该实例方法标注为mutating,正如来自原始实现的修改方法一样。

实例

Tips:您正在学习的是Swift 扩展 | 小熊教程系列。本文链接https://www.xxfxb.com/?p=8602 ,您可通过标签查询系列课程。小熊分享邦(www.xxfxb.com)祝您学习愉快!

下面的例子向 Swift 的 Double 类型添加了一个新的名为 square 的修改方法,来实现一个原始值的平方计算:

 extension Double {    mutating func square() {       let pi = 3.1415       self = pi * self * self    } }  var Trial1 = 3.3 Trial1.square() print("圆的面积为: /(Trial1)")   var Trial2 = 5.8 Trial2.square() print("圆的面积为: /(Trial2)")   var Trial3 = 120.3 Trial3.square() print("圆的面积为: /(Trial3)") 

以上程序执行输出结果为:

 圆的面积为: 34.210935 圆的面积为: 105.68006 圆的面积为: 45464.070735 

下标

扩展可以向一个已有类型添加新下标。

实例

Tips:您正在学习的是Swift 扩展 | 小熊教程系列。本文链接https://www.xxfxb.com/?p=8602 ,您可通过标签查询系列课程。小熊分享邦(www.xxfxb.com)祝您学习愉快!

以下例子向 Swift 内建类型Int添加了一个整型下标。该下标[n]返回十进制数字

 extension Int {    subscript(var multtable: Int) -> Int {       var no1 = 1       while multtable > 0 {          no1 *= 10          --multtable       }       return (self / no1) % 10    } }      print(12[0]) print(7869[1]) print(786543[2]) 

以上程序执行输出结果为:

 2 6 5 

嵌套类型

扩展可以向已有的类、结构体和枚举添加新的嵌套类型:

 extension Int {    enum calc    {       case add       case sub       case mult       case div       case anything    }     var print: calc {       switch self       {          case 0:             return .add          case 1:             return .sub          case 2:             return .mult          case 3:             return .div          default:             return .anything        }    } }  func result(numb: [Int]) {    for i in numb {       switch i.print {          case .add:             print(" 10 ")           case .sub:             print(" 20 ")          case .mult:          print(" 30 ")          case .div:          print(" 40 ")          default:          print(" 50 ")        }    } }  result([0, 1, 2, 3, 4, 7]) 

以上程序执行输出结果为:

  10   20   30   40   50   50  
赞(0) 打赏
未经允许不得转载:小熊分享邦 » Swift 扩展 | 小熊教程

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏