Swift3.0函数的类 协议 代理设计模式

//类 协议  代理设计模式 闭包

import Foundation

//类:具有相同特征和行为的事物抽象

//根据类创建的实例就是对象

//类的创建格式

/*class 类名: 父亲 {

属性

行为

}*/

//人类:Person 属性:姓名,性别,年龄  行为:吃饭,睡觉

//NSObject也是swift中所有的根类(基类)

class Person: NSObject {

//属性

//1

//swift中不允许非可选类型的属性不赋初始值

//直接给初始值

//var name:String = "韩沉"

//2

/* var name:String

//在初始化方法中,给属性赋值

init(name:String){

self.name = name

}*/

//3 属性为可选类型

//var name:String?

//4 隐士解析类型

var name:String!

var age:Int!

var gender:String!

//类型属性

static var color:String!

//提供一个快速创建对象的初始化放法

init(name:String,age:Int,gender:String) {

self.name = name

self.age = age

self.gender = gender

}

//行为(方法)

func eat()  {

print("韩尘很帅")

}

func sleep ()  {

print("韩沉睡觉也很帅")

}

//类方法

static func daDouDou(){

print("打豆豆")

}

}

//创建一个对象

let p = Person(name: "韩沉", age: 26, gender: "男")

print(p.name,p.age,p.gender)

p.eat()

p.sleep()

//访问类属性

Person.color = "黄色"

print(Person.color)

//调用类方法

Person.daDouDou()

class Student: Person {

var number:Int!

func study()  {

print("抓坏人,好警察")

}

//重写父类继承过来的方法

override func eat() {

super.eat()

print("吃食堂")

}

}

let stu = Student(name: "韩沉", age: 26, gender: "男")

stu.number = 100101

stu.study()

print(stu.name,stu.age,stu.gender)

stu.eat()

stu.sleep()

//协议  代理设计模式

//oc下的协议

@objc protocol GirlDelegate {

//协议中只写函数的声明

func makeMoney()//必须实现的方法

//选择实现的方法

@objc optional func wish()

@objc optional func cook()

@objc optional func doHousework()

}

class Girl: NSObject {

//设置代理属性

//女孩想买东西男朋友挣钱

var delegate:GirlDelegate!

func buySomething(){

//男朋友挣钱

self.delegate.makeMoney()

}

//女孩饿了

func hungry()  {

self.delegate.cook!()

}

//女孩有脏衣服

func youZangyifu()  {

self.delegate.wish!()

}

//女孩家里脏了

func clearHome()  {

self.delegate.doHousework!()

}

}

//遵循协议

class Boy: NSObject,GirlDelegate {

func makeMoney() {

print("一天1000元")

}

func cook() {

print("甜点")

}

func wish() {

print("手洗")

}

func doHousework() {

print("找保洁")

}

}

let suMian = Girl()

let hanchen = Boy()

//给代理属性赋值

suMian.delegate = hanchen

//sumian发号施令

suMian.buySomething()

suMian.hungry()

suMian.youZangyifu()

suMian.clearHome()

/**

代理设计模式的步骤

1.设计协议

2.设置代理属性

3.遵循协议

4.实现协议中的方法

5.在外界指定代理属性(给代理属性赋值)

6.告诉代理对象什么时候干活

*/

//制定一个保姆的协议{做饭,做家务,照顾孩子

}

//设计一个Hostess 发出协议 设置一个保姆类 遵循协议

*/

//swift中的协议代理格式,协议中的方法都是必须实现的

protocol HostessDelegate{

func doHousework()

func cook()

func takeCarebaby()

}

class Hostess: NSObject{

//定义代理属性

var delegate:HostessDelegate!

func clearHome()  {

self.delegate.doHousework()

}

func erLe()  {

self.delegate.cook()

}

func haiZi()  {

self.delegate.takeCarebaby()

}

}

//给NSObject扩充方法

extension NSObject{

func sayHello()  {

print("你好济宁师范")

}

}

class Nanny: NSObject{

}

let n = Nanny()

n.sayHello()

//延展:用来扩充一个类,主要用来管理类的方法或者遵循某个协议中的方法

//3.遵循协议

extension Nanny : HostessDelegate{

//4.实现协议中的方法

func doHousework() {

print("做家务")

}

func cook() {

print("做饭")

}

func takeCarebaby() {

print("照顾小孩")

}

}

let cuiHua = Hostess()

let ruHua = Nanny()

//给代理属性赋值

cuiHua.delegate = ruHua

cuiHua.clearHome()

cuiHua.erLe()

cuiHua.haiZi()

你可能感兴趣的:(Swift3.0函数的类 协议 代理设计模式)