Swift扩展(Extension)
在现有类和结构体的类型基础上,扩展新的功能。 语法:
- extension SomeType{
- // new functionality to add to SomeType goes here
- }
- An extension can extend an existing type to make itadopt one or more protocols.Where this is the case,
- the protocol names are written in exactly the sameway as for a class or structure:
- extension SomeType: SomeProtocol,AnotherProtocol {
- // implementation of protocol requirements goes here
- }
计算属性
- 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
- println("One inch is \(oneInch) meters")
- // prints "One inch is 0.0254 meters"
- let threeFeet =3.ft
- println("Three feet is \(threeFeet) meters")
- // prints "Three feet is0.914399970739201 meters"
- let aMarathon = 42.km + 195.m
- println("Amarathon is \(aMarathon) meters long")
使用构造器
- struct Size {
- varwidth = 0.0, height = 0.0
- }
- struct Point {
- var x = 0.0, y = 0.0
- }
- struct Rect {
- var origin = Point()
- var size= Size()
- }
- extension Rect{
- init(center: Point, size: Size) {
- let originX = center.x - (size.width / 2) let originY = center.y - (size.height/ 2) self.init(origin: Point(x: originX, y: originY),
- size: size)//调用 Rect 结构体构造器}
- }
- let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))
方法扩展
- struct Size {
- varwidth = 0.0, height = 0.0
- }
- struct Point {
- var x = 0.0, y = 0.0
- }
- struct Rect {
- var origin = Point()
- var size= Size()
- }
- extension Rect{
- init(center: Point, size: Size) {
- let originX = center.x - (size.width / 2) let originY = center.y - (size.height/ 2) self.init(origin: Point(x: originX, y: originY),
- size: size)//调用 Rect 结构体构造器
- }
- }
- let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))
Swift交流讨论论坛论坛:http://www.cocoagame.net
欢迎加入Swift技术交流群:362298485
Swift扩展(Extension)的更多相关文章
- 【iOS】Swift扩展extension和协议protocol
加上几个关节前Playground摘要码进入github在,凝视写了非常多,主要是为了方便自己的未来可以Fanfankan. Swift语法的主要部分几乎相同的. 当然也有通用的.运算符重载.ARC. ...
- Swift 扩展(Extension)总结
概要 扩展是给已经存在的类(class),结构体(structure),枚举类型(enumeration)和协议(protocol)增加新的功能.类似Objective-C中的Category,不同的 ...
- Swift语言精要 - 扩展(Extension)
swift的Extension用户在不访问代码的情况下扩展基本结构类型或自定义类 extension Int { var doubled : Int { } func multiplyWith(ano ...
- Objective-C分类 (category)和扩展(Extension)
1.分类(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...
- Swift 使用Extension 场景 浅析
别人一看到我的 Swift 代码,立刻就会问我为什么如此频繁的使用 extension.这是前几天在我写的另一篇文章中收到的评论: 我大量使用 extension 的主要目的是为了提高代码可读性.以下 ...
- Objective-C语法之扩展(Extension)的使用
Objective-C 2.0增加了Class Extension用于解决两个问题: 可声明私有可读写的属性,而在类的声明中是同名的公开只读属性,从而来支持公开只读.私有可读写的属性 可声明私有方法: ...
- Objective-C 类别(category)和扩展(Extension)
1.类别(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...
- [Swift]扩展String类:实现find()查找子字符串在父字符串中的位置
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Swift protocol extension method is called instead of method implemented in subclass
Swift protocol extension method is called instead of method implemented in subclass protocol MyProto ...
- 分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别
1.分类的概念 分类是为了扩展系统类的方法而产生的一种方式,其作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法. 如何创建一个分类?↓↓ ()Cmd+N, ...
随机推荐
- linux 一些遇到的问题
亚马逊云服务器上的YUM源有些问题,是64位系统,安装GCC的时候要用 yum install gcc44 yum install gcc44-c++ 查看源的列表和禁用(开启)源 yum-confi ...
- 【OSG】osgText::Text 研究
由于需要在3D坐标轴上显示刻度值,所以要用到osgText::Text,这里简单记录一下其常见用法. 一.基本知识 常见设置 设置字体:setFont 设置内容:setText,这里输入参数需要是os ...
- 硝烟中的scrum和xp学习笔记 - 怎样编写产品backlog
产品backlog是scrum的核心,也是一切的起源. 从根本上说,它就是一个需求/故事/特性组成的列表,按照重要性的级别排序. 我们叫它story, 或者backlog(条目). Backlog I ...
- Codeforces Gym 100733A Shitália 计算几何
ShitáliaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.acti ...
- delphi execCommand
WebBrowser1.Document as IHTMLDocument2 关键点 function execCommand(const cmdID: WideString; showUI: Wor ...
- C语言调用Lua函数
记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪. 那个时期,人们常常称互联网为赛博空间.现在工作了,大量的零碎时间用于上微博,知乎,QQ.这些碎片化的阅读 ...
- 动态SQL使用小结
1.什么是动态SQL? 静态 SQL:静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的.静态 SQL 语句的编 ...
- Mac下使用Fiddler
Fiddler是用C#开发的. 所以Fiddler不能在Mac系统中运行. 没办法直接用Fiddler来截获MAC系统中的HTTP/HTTPS, Mac 用户怎么办呢? Fiddler可以允 ...
- mybatis0209 二级缓存
.1二级缓存 1.1.1原理 mybatis和spring整合后一级缓存就没有了,sqlSession在不关闭的前提下2次查询就会从缓存中取,一级缓存缓存在sqlSession对象里面,当多用户查询的 ...
- MPEG简介 + 如何计算CBR 和VBR的MP3的播放时间
1. 声明本文所写内容,多数整理自互联网,版权归原作者所有笔者知识有限,文中难免有误,欢迎批评指正,admin (at) crifan.com觉得此文对你有帮助,想要发邮件来感谢的,也欢迎哈,^_^欢 ...