设为首页 加入收藏

TOP

Swift-----类型转换 、 嵌套类型 、 扩展 、 协议 、 访问控制(二)
2017-10-10 12:17:31 】 浏览:2039
Tags:Swift----- 类型 转换 扩展 协议 访问 控制
n
library { if item is Movie { movieCount++ }else if item is Song { songCount++ } } movieCount songCount //遍历每个媒体,并打印详细信息 for item in library { if item is Movie { //as用于强制装换,能转就转,不能转的话程序直接崩溃 let movie = item as! Movie println("电影名:\(movie.name),导演:\(movie.director)") }else if item is Song { let song = item as! Song println("歌曲名:\(song.name), 演唱者:\(song.airtist)") } } for item in library { //as?与as功能相同,能转就转,不能转返回nil,程序不会崩溃,返回的是一个可选值 if let movie = item as? Movie { println("电影名:\(movie.name),导演:\(movie.director)") } else if let song = item as? Song { println("歌曲名:\(song.name), 演唱者:\(song.airtist)") } } 2 扩展的使用 2.1 问题 扩展就是向一个已有的类、结构体或枚举添加新功能,和OC的分类类似。本案例演示Swift中扩展的用法,包括在扩展中添加计算属性、构造方法。实例方法和类型方法等。 2.2 方案 Swift中的扩展可以向已有的类型添加计算型实例属性和计算型类型属性,但是不可以添加存储属性,也不可以向已有属性添加属性观测器。 扩展还可以向已有的类型添加新的构造器,新构造器有责任保证构造过程能够让所有属性全都初始化。对于类而言扩展只能添加新的便利构造器,不能添加新的指定构造器和析构方法,指定构造器和析构方法必须总是由原始的类提供。 扩展可以向已有类型添加新的实例方法和类型方法。 2.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:添加计算型属性 下面这个例子向已有的类型添加计算型属性,向Swift中的Double类型添加五个计算型实例属性,从而提供对距离单位的支持,这些属性都是可以通过点语法来访问。 这些属性表达的含义是把一个Double类型的值看做是某单位下的长度值,1.0用来表示一米单位为m,其他单位则需要一些转换来表示在米下测量的值,km表示千米,ft表示英尺,cm表示厘米,mm表示毫米。 这些属性都是只读的计算属性,所以可以省略get关键字,返回类型都是Double类型,代码如下所示: extension Double { var km:Double { return self*1000 } var m:Double { return self } var cm:Double { return self/100 } var mm:Double { return self/1000 } var ft:Double { return self/3.28084 } } let oneIch = 25.4.mm let threeFeet = 3.ft 运行结果如图-2所示: 图-2 步骤二:添加构造方法 定义一个用于描述几何矩形的定制结构体Rect,这个例子同时定义了两个辅助结构体Size和Point,0.0作为所有属性的默认值,代码如下所示: struct Point { var x = 0.0 var y = 0.0 } struct Size { var width = 0.0 var height = 0.0 } struct Rect { var origin = Point() var size = Size() } 再使用扩展提供一个额外的构造器,可以使用中心点来进行构造,代码如下所示: extension Rect { init(center:Point,size:Size) { var originX = center.x - size.width/2 var originY = center.y - size.height/2 self.origin = Point(x: originX, y: originY) self.size = size } } var rect = Rect(center: Point(x: 20, y: 10), size: Size(width: 10, height: 10)) 运行结果如图-3所示: 图-3 步骤三:添加方法 向Int类型添加一个名为repetitions的新的实例方法,代码如下所示: extension Int { func repetition(task:()->()) { for i in 0...self { task() } } } var i = 3 i.repetition({println("hehe")}) 运行结果如图-4所示: 图-4 2.4 完整代码 本案例中,完整代码如下所示: import UIKit //扩展计算属性 extension Double { var km:Double { return self*1000 } var m:Double { return self } var cm:Double { return self/100 } var mm:Double { return self/1000 } var ft:Double { return self/3.28084 } } let oneIch = 25.4.mm let threeFeet = 3.ft //扩展构造器 struct Point { var x = 0.0 var y = 0.0 } struct Size { var width = 0.0 var height = 0.0 } struct Rect { var origin = Point() var size = Size() } extension Rect { init(center:Point,size:Size) { var originX = center.x - size.width/2 var originY = center.y - size.height/2 self.origin = Point(x: originX, y: originY) self.size = size } } var rect = Rect(center: Point(x: 20, y: 10), size: Size(width: 10, height: 10)) //扩展方法 extension Int { func repetition(task:()->()) { for i in 0...self { task() } } } var i = 3 repetition({println("hehe")}) 3 计时器 3.1 问题 本案例学习使用Swift语言使用纯代码的方式实现第一个Swift项目——一个简单的计时器,如图-5,图-6所示: 图-5-6 3.2 方案 首先使用Xcode创建一个SingleViewApplication项目,编程语言选择Swift,可以看到Xcode已经提供的项目代码全都换成Swift语言实现,如图-7所示: 图-7 本案例采用纯代码的方式实现所以删除Storyboard,将程序的MainInterface清空,在程序的启动方法中,采用手写代码的方式创建的window,如图-8所示: 图-8 接下来使用代码搭建计时器项目的界面,界面上方是一个现实倒计时的Label控件,下方是一排预设的时间按钮,最下方是启动和复位按钮。 扩展可以向已有类型
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇CocoaPods的安装和使用那些事(Xc.. 下一篇Swift语法笔记

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目