Swift学习:扩展(Extensions)

  扩展就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能。这包括在没有权限获取原始源代码的情况下扩展类型的能力(即 逆向建模)。扩展和 Objective-C 的分类类似。(与 Objective-C 不同的是,Swift 的扩展没有名字。)

  swift 中的扩展可以:

    添加计算型属性和计算型类型属性

    定义实例方法和类型方法

    提供新的构造器

    定义下标

    定义和使用新的嵌套类型

    使一个已有类型符合某个协议

  在 swift 中,你甚至可以对协议进行扩展,提供协议要求的实现,或者添加额外的功能,从而可以让符合协议的类型拥有这些功能。你可以从协议扩展中获取更多的细节。

  注意

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

  扩展语法

  使用关键子 extension 来声明扩展:

  extension SomeType {

    // 为 SomeType 添加的新功能写在这里

  }

  可以通过扩展来扩展一个已有类型,使其采纳一个或多个协议。在这种情况下,无论是类还是结构体,协议名字的书写方式都是一样的。

  extension SomeType: SomeProtocol,AnotherProtocol {

    // 协议实现写在这里

  }

  通过这种方式添加协议一致性的详细描述可参考扩展添加协议一致性。

  注意:

  如果你通过扩展为一个已有类型添加新功能,那么新功能对该类型的所有已有实例都是可用的,即使它们是在这个扩展定义之前创建的。

  计算型属性

  扩展可以为已有类型添加计算型实例属性和计算型类型属性。下面的例子为 swift 的内建 Double 类型添加了五个计算型实例属性,从而提供与距离单位协作的基本支持:

  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 }

  }

  let oneInch = 25.4.mm

  print("One inckh is \(oneInch) meters")

  let threeFeet = 3.ft

  print("Three feet is \(threeFeet) meters")

  这些计算型属性表达的含义是把一个 Double 值看作是某单位下的长度值。即使它们被实现为计算型属性,但这些属性的名字仍可紧接一个浮点型字面值,从而通过点语法来使用,并以此实现距离转换。

  

    

  

原文地址:https://www.cnblogs.com/chmhml/p/8166001.html

时间: 2024-10-10 04:26:51

Swift学习:扩展(Extensions)的相关文章

Swift学习——A Swift Tour 协议和扩展

Protocols and Extensions Protocols  协议的使用 使用关键字 protocol 定义一个协议 protocol ExampleProtocol { var simpleDescription: String { get } mutating func adjust() } 类,枚举和结构体都可以实现协议 class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very sim

Swift 学习笔记十五:扩展

扩展就是向一个已有的类.结构体或枚举类型添加新功能(functionality).扩展和 Objective-C 中的分类(categories)类似.(不过与Objective-C不同的是,Swift 的扩展没有名字.) Swift 中的扩展可以: 1.添加计算型属性和计算静态属性 2.定义实例方法和类型方法 3.提供新的构造器 4.定义下标 5.定义和使用新的嵌套类型 6.使一个已有类型符合某个协议 一.扩展属性,构造器,方法 class Human{ var name:String? va

汇集了很多swift 学习指南

https://github.com/ipader/SwiftGuide 1,059   Unstar7,294 Fork1,966 ipader/SwiftGuide CodeIssues 0Pull requests 0WikiPulseGraphs 这份指南汇集了Swift语言主流学习资源,并以开发者的视角整理编排.http://dev.swiftguide.cn 376 commits 3 branches 0 releases 12 contributors Swift 100.0%

Swift学习——A Swift Tour 枚举和结构体

Enumerations and Structures Enumerations   枚举的使用 使用 enum 定义一个枚举,枚举里面可以关联方法,比如下文中的描述方法 enum Rank: Int { case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String { switch self { ca

iOS ---Swift学习与复习

swift中文网 http://www.swiftv.cn http://swifter.tips/ http://objccn.io/ http://www.swiftmi.com/code4swift http://stackoverflow.com http://weibo.com/oldcoder 43个优秀的Swift开源项目推荐 https://developer.apple.com/swift/blog/ http://code.cocoachina.com http://swif

12套swift学习资源分享

虽然objective-c编程语言在过去很长一段时间都是iOS应用开发的基础语言,且很多iOS开发者对其也深爱有佳,但是随着swift编程语言的问世,迅速发展为开发者追捧的语言.且今年伴随着swift2.0的问世及swift语言的开源,更加奠定了其在今后的发展. 接触过swift语言的童鞋应该都知道,在开发 OS X, IOS, watchOS 和 TVOS 应用上,Swift 毫无疑问就是未来.它结合了 C 和 Objective-C 的众多优点,而且支持 Cocoa 和 Cocoa Touc

Swift学习笔记(11)--类与结构体

类与结构是编程人员在代码中会经常用到的代码块.在类与结构中可以像定义常量,变量和函数一样,定义相关的属性和方法以此来实现各种功能. 和其它的编程语言不太相同的是,Swift不需要单独创建接口或者实现文件来使用类或者结构.Swift中的类或者结构可以在单文件中直接定义,一旦定义完成后,就能够被直接其它代码使用. 注意:一个类的实例一般被视作一个对象,但是在Swift中,类与结构更像是一个函数方法,在后续的章节中更多地是讲述类和结构的功能性. 1.类和结构的异同 类和结构有一些相似的地方,它们都可以

十九、扩展 Extensions

1. 概述 扩展用于给已经存在的类.枚举.结构体添加新的功能.Swift中的扩展(extensions)与Objective-C中的分类(categories)的类似,但不同点在于,扩展没有名字. 扩展有如下功能: 1)增加 computed属性和静态的computed属性 2)定义实例方法 instance methods 和 类型方法type methods(比如类方法) 3)提供新的构造器 4)定义下标 5)定义和使用新的嵌套类型 6)使某个已存在的类型符合某个协议( 原话:Make an

【转载】OpenStack Swift学习笔记

免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:崔炳华      原文地址:http://blog.csdn.net/i_chips/article/details/17787017 1       概述 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一.Swift的目的是使用普通硬件来构建冗余的.可扩展的分布式对象存储集群,存储容量可达PB级. Swift并不是