您的位置:首页 > 其它

Switch入门第三讲

2016-03-17 17:50 495 查看
// 结构体
struct Student
{
//结构体的属性
var age: Int
var name: String
//结构体的实例方法
func sayHello()
{
print("hello")
}
//结构体类方法
static func backName()
{
print("隔壁老王")
}
}
//结构体的构造方法
var 老王 = Student(age: 38, name: "王老五")

//对象调用实例方法
老王.sayHello()

//类名调用类方法
Student.backName()

//结构体的值类型(等于把一个对象的值复制一份给新对象)
var 老马 = 老王
老王.name = "老司机"
print(老王.name)

//类
class Teacher
{
//属性
var name: String? //? 代表可选类型,可以给值也可以不给
var age: Int = 0

//类的实例方法
func doSomething()
{
print("敲代码")
}

//类方法
class func saySomething()
{
print("说话")
}

//构造方法
init (age: Int, name: String)
{
self.age = age
self.name = name
}
}

//初始化对象
var liuhui = Teacher(age: 40, name: "刘辉")

//调用实例方法
liuhui.doSomething()

//调用类方法
Teacher.saySomething()

//类是引用类型(等于就兑现和新对象指向同一块内存)
var haiyang = liuhui
liuhui.age = 37
print(haiyang.age)

//存储属性和计算属性
class Rect
{
//存储属性
var point:(x: Int, y: Int) = (0, 0)
var size:(w: Int, h: Int) = (0, 0)
//计算属性
var center:(x: Int, y: Int)
{
get
{
print("get")
return (point.x + size.w / 2, point.y + size.h / 2)
}
set
{
print("set")
//newValue是系统提供的set值
//作为计算属性,不能接收值
size.w = (newValue.x - point.x) * 2
size.h = (newValue.y - point.y) * 2
}
}
}

var rect: Rect = Rect()
rect.point = (10, 10)

//走set方法
//rect.point = (50, 50)
//print(rect.size)

rect.size = (100, 100)

//走get方法
print(rect.center)

//属性观察器(和OC里的KVO差不多)
class Animal
{
var name: String = "🐶"
{
willSet
{
//系统提供的新值
print(newValue)
}
didSet
{
//系统提供的旧值
print(oldValue)
}
}
//析构方法
deinit
{
print("被释放了")
}
}

var pig: Animal?
= Animal()
print(pig!.name)
pig!.name = "***🐷"
print(pig!.name)
pig = nil

//练习
class Student2
{
var name: String = "HHH"
{
willSet
{
print(newValue)
}
didSet
{
print(oldValue)
}
}
}
var TTT: Student2 = Student2()
print(TTT.name)
TTT.name = "BBB"

//类的继承
class Person
{
//final 防止父类重写方法
final func eat()
{
print("吃饭")
}
func sleep()
{
print("睡觉")
}
func clickDD()
{
print("打豆豆")
}

}

class Women: Person
{
func upBaby()
{
print("生小孩")
}
// override重写父类方法
//    override func eat()
//    {
//        print("戒了")
//    }
}

var 景年: Women = Women()
景年.upBaby()
景年.eat()
景年.sleep()
景年.clickDD()

// Extension 扩展
extension Women
{
func becomeWomen()
{
print("去趟泰国吧")
}
}

景年.becomeWomen()

// 类的循环引用及解决办法
class Boy
{
//属性
var name: String = ""
//boy有一个女朋友
//weak 解决循环引用
weak var girlFriend: Girl?
//构造方法
init (name: String)
{
self.name = name
}
//析构方法
deinit
{
print("boy被释放了")
}
}

class Girl
{
//属性
var name: String = ""
//girl有一个男朋友
var boyFriend: Boy?
//构造方法
init (name: String)
{
self.name = name
}
//析构方法
deinit
{
print("girl被释放了")
}
}

var 海洋: Boy? = Boy(name: "海洋")
var 景年1: Girl? = Girl(name: "景年")

海洋?.girlFriend = 景年1
景年1?.boyFriend = 海洋

海洋 = nil
景年1 = nil
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: