Swift初体验(三)
/*******************************************************************************/
// 协议
protocol Description{ func description() -> String
mutating func aMutatingMethod()
class func aTypeMethod()
// func anOptionalMethod()
} // 假设要声明可选择实现的方法,须要在func前加@optional声明,并且协议的前面须要加@objc声明,这种协议结构体不能遵守,所以也不同意mutating方法的存在
//@objc protocol Description{
//
// func description() -> String
//// mutating func aMutatingMethod()
// class func aTypeMethod()
// @optional func anOptionalMethod()
//} // 结构体
struct Point{
var x = 0.0
var y = 0.0
} struct Size{
var width = 0.0
var height = 0.0
} var point = Point()
var size = Size() var array = Array<String>() struct Rect{
var origin = Point()
var size = Size()
var center: Point{
get{
let centerX = origin.x + size.width / 2
let centerY = origin.y + size.height / 2
return Point(x:centerX , y:centerY)
}
set{
// set方法会提供一个默认的新值:newValue
let originX = newValue.x - size.width / 2
let originY = newValue.y - size.height / 2
origin = Point(x:originX, y:originY)
}
} mutating func moveBy(deltaX:Double, deltaY:Double){
let newX = origin.x + deltaX
let newY = origin.y + deltaY
origin = Point(x:newX, y:newY)
} func description() -> String{
return "(\(origin.x),\(origin.y),\(size.width),\(size.height))"
} mutating func aMutatingMethod(){ } func anOptionalMethod(){ } // 假设是实现协议中得类方法,尽管在协议中使用了classkeyword,可是在结构体或者枚举实现的时候依旧须要使用statickeyword
static func aTypeMethod(){ } }
var frame = Rect()
frame.origin.x = 10
frame.origin.y = 10
frame.size = Size(width:100,height:100) println("frame.center = (\(frame.center.x), \(frame.center.y))") frame.center = Point(x:100,y:100)
println("frame.center = (\(frame.center.x), \(frame.center.y))")
println("frame.origin = (\(frame.origin.x), \(frame.origin.y))") // 枚举
enum PersonIdentify:String{
case Teacher = "teacher"
case Student = "student"
} // 类
class Person{
var name: String? var sex: String? var identify: PersonIdentify?
// 构造器中,第一个參数依旧会创建一个和局部參数名称同样的外部參数名称
init(name: String, sex: String, identify: PersonIdentify){ self.name = name;
self.sex = sex;
self.identify = identify
} func description() -> String{
// 调用枚举值的toRaw()方法能够获取到枚举值的初值
return "name = \(name) sex = \(sex) course = \(identify!.toRaw())"
} // 在类中假设实现协议中定义的mutating方法,那么不须要加"mutating"keyword
func aMutatingMethod(){ } class func aTypeMethod(){ }
} var person1 = Person(name:"humingtao",sex:"m",identify:.Student)
var person2 = Person(name:"kebi",sex:"m",identify:.Teacher)
switch(person1.identify!){
case .Teacher:
println("I am a teacher")
case .Student:
println("student")
} class Student:Person{
var number: String?
// 在类中,类型属性仅仅能够是计算属性,可是在枚举和结构体中,既能够是计算属性,也能够是存值属性
// 在类中,声明一个类型属性的keyword是class,在结构体和枚举中是static
class var attendClassTime: String{
return "9:30"
}
init(name: String, sex: String, number: String){ super.init(name: name, sex: sex, identify: .Student)
self.number = number
}
}
var student1 = Student(name: "hmt",sex: "m",number: "12345678") class Teacher:Person{
var course: String?
init(name: String, sex: String, course: String){ super.init(name: name, sex: sex, identify: .Teacher)
self.course = course
}
override func description() -> String{ return super.description() + "" + "course = \(course)"
}
} // 思考为什么加"?"
class course{
var name: String?
init(name: String){ self.name = name
}
}
Swift初体验(三)的更多相关文章
- Swift初体验(两)
// 写功能初体验 func getMyName(firstName first:String, lastName last:String) -> String{ //return first ...
- swift初体验
swift是一门类型安全的语言,同样也是基于c语言 那么c语言的一些类型也是实用的,不同的是:swift声明变量和常量是不一样的 let:用来修饰常量:var用来修饰变量 e.g: let num=1 ...
- Swift初体验之图案锁
这篇在应用上貌似没有价值,貌似我写了好多实际上都没有价值,这里贴出来就是分享下. 自己写swift好多天了,感觉好多东西还是不太懂,边学边做,互勉! 先上图: 代码:下载
- Ruby on rails初体验(三)
继体验一和体验二中的内容,此节将体验二中最开始的目标来实现,体验二中已经将部门添加的部分添加到了公司的show页面,剩下的部分是将部门列表也添加到公司的显示页面,整体思路和体验二中相同,但是还是会有点 ...
- Swift初体验之HelloWord+苹果Swift编程语言新手教程【中文版】
AppDelegate.swift : <span style="font-size:24px;"><strong>// // AppDelegate.sw ...
- Spring Cloud Alibaba 初体验(三) Nacos 与 Dubbo 集成
一.新建项目 新建项目,只放置接口,用于暴露 Dubbo 服务接口 public interface GreetingService { String greeting(); } 二.provider ...
- CentOS 初体验三: Yum 安装、卸载软件
一:Yum 简介 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指 ...
- $.extend({},defaults, options) --(初体验三)
1.$.extend({},defaults, options) 这样做的目的是为了保护包默认参数.也就是defaults里面的参数. 做法是将一个新的空对象({})做为$.extend的第一个参数, ...
- Swift初体验 (一)
// 声明一个常量 let maxNumberOfStudents: Int = 47 // 声明一个变量,假设没有在声明的时候初始化,须要显示的标注其类型 var currentNumberOfSt ...
随机推荐
- Codeforces 325E
Codeforces 325E 原题 题目描述:给出\(n\)个点, 编号为\(0 \text ~ n-1\),每个点连出两条边分别为\(2i\)和\(2i+1\)(\(mod n\)),现从\(0\ ...
- JQuery(下)
26.jQuery 中的 DOM 操作 )DOM(Document Object Model—文档对象模型):一种与浏览器, 平台, 语言无关的接口, 使用该接口可以轻松地访问页面中所有的标准组件 ) ...
- node配置运行环境变量;
node express 在开发环境和生产环境运行的代码是不一样的, 通常是先配置好的,在开发环境运行一套代码,在生产环境运行另一套代码, 开发环境 development, 生产环境producti ...
- 动画原理——脉动(膨胀缩小)&&无规则运动
书籍名称:HTML5-Animation-with-JavaScript 书籍源码:https://github.com/lamberta/html5-animation 1.脉动是一种半径r来回反复 ...
- Mantis Administrator控制密码、注册不用邮件验证、添加测试员[Z]
Mantis默认安装完成后,管理员创建用户,但无法设置用户密码,只有通过邮件由用户自行修改.无法适应某些没有统一邮箱的情况,现将关闭邮箱验证方法和管理员设置用户密码方法验证通过 不用邮件验证: c ...
- 在EBS中如何创建CUX_TOP
1.创建cux用户1.1.创建表空间SQL> conn / as sysdba;Connected.SQL> create tablespace CUXD datafile '/vis/d ...
- (转)详解汇编系统调用过程(以printf为例)
本文以printf为例,详细解析一个简单的printf调用里头,系统究竟做了什么,各寄存器究竟如何变化. 环境: linux + gnu as assembler + ld linker 如何在汇编调 ...
- 出现java.lang.NoSuchFieldException resourceEntries错误的解决方法
JSP表单里面的表单输入<input type= "text" name="user">这里面的每一个输入都是一个Attribute,相当于setA ...
- [springMVC]javax.servlet.jsp.JspTagException: Neither BindingResult nor plain target object for bean
问题描述: 页面使用标签<form:form>进行提交时,出现[springMVC]javax.servlet.jsp.JspTagException: Neither BindingRe ...
- zxing源码分析——QR码部分
Android应用横竖屏切换 zxing源码分析——DataMatrix码部分 zxing源码分析——QR码部分 2013-07-10 17:16:03| 分类: 默认分类 | 标签: |字号大中 ...