Swift - extension

本文详细介绍了Swift中的扩展(Extension),包括扩展的作用、语法,以及如何通过扩展添加计算属性、构造器、方法、突变方法、附属脚本和嵌套类型。通过示例代码展示了如何为Double类型、结构体和Int类型扩展新的功能,如长度单位转换、便捷构造器、自定义方法等。同时,文中也提到了扩展在协议实现和类型增强上的应用。
摘要由CSDN通过智能技术生成

一.概述 - extension

在swift中,swift可以为特定的class, strut, enum或者protocol添加新的特性。当你没有权限对源代码进行改造的时候,此时可以通过extension来对类型进行扩展。extension有点类似于OC的类别 – category,但稍微不同的是category有名字,而extension没有名字。

swift的extension可以做如下几件事,

添加计算属性 - computed properties
添加方法 - methods
添加初始化方法 - initializers
添加附属脚本 - subscripts
添加并使用嵌套类型 - nested types
遵循并实现某一协议 - conform protocol
在swift中,你甚至可以对一个协议protocol进行扩展,实现其协议方法或添加额外的功能,以便于实现该协议的类型可以使用,在swift中,这叫做协议扩展 - protocol extension,后面的内容会举例说明。

二.语法 - extension

定义extension的语法非常简单,只需要使用extension关键字,如下代码
下面展示一些 内联代码片

extension SomeType {
   
    // new functionality to add to SomeType goes here
}

extension可以让一个特定的类型实现一个或多个协议,也就是说无论对于class, structure或enum等类型而言,都可以实现一个或多个协议,如下代码所示

extension SomeType: SomeProtocol, AnotherProtocol {
   
    // implementation of protocol requirements goes here
}

三. 添加多种特性

3.1 添加计算属性 - computed properties

extension可以为已经存在的类型添加计算属性(computed properties),下面的demo为swift内置的Double类型添加了5个计算属性,分别是km, m, cm, mm, ft,用来提供基础的计算距离的功能,如下代码所示。

extension Double {
   
    var km: Double {
    return self * 1_000.0 }
    var m: Double {
    return self }
    var cm: Double {
    return self / 100.0 }
    var mm: Double {
    return self / 1_000.0 }
    var ft: Double {
    return self / 3.28084 }
}

// usage of Double extension
let oneInch = 25.4.mm
print("One inch is \(oneInch) meters")
// Prints "One inch is 0.0254 meters"
let threeFeet = 3.ft
print("Three feet is \(threeFeet) meters")
// Prints "Three feet is 0.914399970739201 meters"

什么是计算属性呢?这大概算是swift语言的特性吧,在swift中属性有两种类型,一种是存储属性,另一种是计算属性。存储属性就是存储在特定的class, struct中的一个常量或变量,可以在定义存储属性的时候指定默认值,也可以在构造过程中设置或修改存储属性的值,需要注意的是enum中并不能定义存储属性;而计算属性不直接存储值,而是提供一个getter, setter来间接获取和设置其他属性和变量的值。

归纳一下,swift中存储属性和计算属性的区别如下表,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值