/*******************************************************************************/
// 协议
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初体验(三)的更多相关文章

  1. Swift初体验(两)

    // 写功能初体验 func getMyName(firstName first:String, lastName last:String) -> String{ //return first ...

  2. swift初体验

    swift是一门类型安全的语言,同样也是基于c语言 那么c语言的一些类型也是实用的,不同的是:swift声明变量和常量是不一样的 let:用来修饰常量:var用来修饰变量 e.g: let num=1 ...

  3. Swift初体验之图案锁

    这篇在应用上貌似没有价值,貌似我写了好多实际上都没有价值,这里贴出来就是分享下. 自己写swift好多天了,感觉好多东西还是不太懂,边学边做,互勉! 先上图: 代码:下载

  4. Ruby on rails初体验(三)

    继体验一和体验二中的内容,此节将体验二中最开始的目标来实现,体验二中已经将部门添加的部分添加到了公司的show页面,剩下的部分是将部门列表也添加到公司的显示页面,整体思路和体验二中相同,但是还是会有点 ...

  5. Swift初体验之HelloWord+苹果Swift编程语言新手教程【中文版】

    AppDelegate.swift : <span style="font-size:24px;"><strong>// // AppDelegate.sw ...

  6. Spring Cloud Alibaba 初体验(三) Nacos 与 Dubbo 集成

    一.新建项目 新建项目,只放置接口,用于暴露 Dubbo 服务接口 public interface GreetingService { String greeting(); } 二.provider ...

  7. CentOS 初体验三: Yum 安装、卸载软件

    一:Yum 简介 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指 ...

  8. $.extend({},defaults, options) --(初体验三)

    1.$.extend({},defaults, options) 这样做的目的是为了保护包默认参数.也就是defaults里面的参数. 做法是将一个新的空对象({})做为$.extend的第一个参数, ...

  9. Swift初体验 (一)

    // 声明一个常量 let maxNumberOfStudents: Int = 47 // 声明一个变量,假设没有在声明的时候初始化,须要显示的标注其类型 var currentNumberOfSt ...

随机推荐

  1. python 自定义信号处理器

    说明: 这里所说的信号与kill 命令中的信号指的是同一个. #!/usr/bin/python #!coding:utf-8 import sys,time,signal def now(): re ...

  2. js题

    function newStr(){ return "hi";}function turn(str){ str.toString = newStr;}var str1 = &quo ...

  3. STL跨DLL使用

    今天在写一个函数,需要将map作为一个引用参数传入函数体内部进行赋值,结果编译通过,执行时总是崩溃,在网上找到了一些作者写的blog,详细解释了这种情况发生的原因,特转载在这里,便于自己今后查询. 原 ...

  4. POJ 3111 K Best(二分答案)

    [题目链接] http://poj.org/problem?id=3111 [题目大意] 选取k个物品,最大化sum(ai)/sum(bi) [题解] 如果答案是x,那么有sigma(a)>=s ...

  5. java双线程调用同一个对象+锁

    两个线程(Thread)调用同一个对象(使用Runnable接口的对象ThreadJob) 误区:下一个线程会从上一个线程结束的地方开始 正解:如 public domd implements Run ...

  6. webpack入门笔记

    此为第一篇主要是webpack入门笔记: http://if-true.com/2015/10/16/webpack-tutorial-translate.html

  7. html系列教程--embed fieldset legend figure figurecaption

    <embed> 标签:定义嵌入的内容 <embed src="" type="" /> embed属性: 1.src:嵌入内容地址 2. ...

  8. 蓝桥杯算法训练<二>

    一.最小乘积(基本型)[这个题需要认真阅读试题,内容量较大,刚开始的时候,由于练习系统上给出的输入输出的格式有问题,没看懂,最后在MikCu的博客上看到了正确的格式,参考了代码,最终得到正确的结果.为 ...

  9. OC中另外的一个常用技术:通知(Notification)

    OC中另外的一个常用技术:通知(Nofitication)其实这里的通知和之前说到的KVO功能很想,也是用于监听操作的,但是和KVO不同的是,KVO只用来监听属性值的变化,这个发送监听的操作是系统控制 ...

  10. BZOJ 2707: [SDOI2012]走迷宫( tarjan + 高斯消元 )

    数据范围太大不能直接高斯消元, tarjan缩点然后按拓扑逆序对每个强连通分量高斯消元就可以了. E(u) = 1 + Σ E(v) / degree(u) 对拍时发现网上2个程序的INF判断和我不一 ...