類 協(xié)議 代理設(shè)計模式

import Foundation

//類:具有相同特征和行為的事物的抽象

//根據(jù)類創(chuàng)建的實例就是:對象

//類的創(chuàng)建格式

/*

class 類名: 父類 {

屬性

行為

}

*/

//人類:Person 屬性:姓名 年齡 性別 行為:吃飯 睡覺

//NSobject 也是Swift中所有類的根類(基類)

class Person: NSObject {

//屬性

//方案一 直接給初始值

//swift中不允許非可選類型的屬性不賦初始值

//? var name: String = ""

//方案二在初始化方法中,給屬性賦值

//? ? var name:String

//? ? init(name:String) {

//? ? ? ? self.name = name

//? ? }

//方案三 定義成可選類型

// var name:String?

//方案四(定義成隱式解析類型 最常用)

var name:String!

var age:Int!

var gender:String!

//類型屬性

static var color:String!

//提供一個快速創(chuàng)建對象的初始化方法

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("打豆豆")

}

}

//創(chuàng)建一個對象

let p = Person(name: "男哥", age: 16, gender: "女")

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

p.eat()

p.sleep()

//訪問類屬性

Person.color = "黃色"

print(Person.color)

//調(diào)用類方法

Person.dadoudou()

class Student: Person {

var number:Int!

func study()? {

print("過四級")

}

//重寫從父類繼承過來的方法

override func eat() {

super.eat()

print("吃滿漢全席")

}

}

let stu = Student(name: "景甜", age: 25, gender: "女")

stu.number = 11011

stu.study()

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

stu.eat()

stu.sleep()

// 協(xié)議? 代理設(shè)計模式

//oc下的協(xié)議

@objc protocol GirlDelegate{

//協(xié)議中只寫函數(shù)的聲明

func makeMoney() //必須實現(xiàn)的方法

//選擇實現(xiàn)的方法

@objc optional func wish()

@objc optional func cook()

@objc optional func doHousework()

}

class Girl: NSObject {

//設(shè)置代理屬性

var delegate:GirlDelegate!

//女孩想買東西

func buySomething() {

//,男朋友掙錢

self.delegate.makeMoney()

}

//女孩餓了

func hungry(){

//男朋友做飯

self.delegate.cook!()

}

//女孩有臟衣服

func youzangyifu(){

//男朋友洗衣服

self.delegate.wish!()

}

//女孩家里臟了

func clearHome(){

//男孩做家務(wù)

self.delegate.doHousework!()

}

}

//遵循協(xié)議

class Boy : NSObject, GirlDelegate {

func makeMoney() {

print("一天1000塊")

}

func cook() {

print("法式小甜點")

}

func wish() {

print("手洗")

}

func doHousework() {

print("找保潔")

}

}

let nanGe = Girl()

let LiYiFeng = Boy()

//給代理屬性賦值

nanGe.delegate = LiYiFeng

//男哥發(fā)號指令

nanGe.buySomething()

nanGe.hungry()

nanGe.youzangyifu()

nanGe.clearHome()

/*

代理設(shè)計模式的步驟

1.設(shè)計協(xié)議

2.設(shè)置代理屬性

3.遵循協(xié)議

4.實現(xiàn)協(xié)議中的方法

5.在外界指定代理屬性(給代理屬性賦值)

6.告訴代理對象什么時候干活

*/

/*作業(yè):制定一個保姆的協(xié)議

{

做家務(wù)

做飯

照顧孩子

}

設(shè)計Hostess 發(fā)出協(xié)議

設(shè)置保姆類? 遵循協(xié)議

*/

/*

@objc protocol HostessDelegate{

func doHousework()

@objc optional func cook()

@objc optional func lookafterBaby()

}

class Hostess:NSObject{

//設(shè)置代理屬性

var delegate:HostessDelegate!

//Rose家里臟了

func jializangle(){

//Lady做家務(wù)

self.delegate.doHousework()

}

//Rose餓了

func hungry(){

//Lady 做飯

self.delegate.cook!()

}

//Rose孩子哭了

func babyCry(){

//Lady看孩子

self.delegate.lookafterBaby!()

}

}

//遵循協(xié)議

class Boonne:NSObject,HostessDelegate {

func doHousework() {

print("做家務(wù)")

}

func cook(){

print("做飯")

}

func lookafterBaby() {

print("看孩子")

}

}

//給代理屬性賦值

let Rose = Hostess()

let Lady = Boonne()

Rose.delegate = Lady

Rose.jializangle()

Rose.hungry()

Rose.babyCry()

*/

//Swift中協(xié)議格式,協(xié)議中的方法都是必須實現(xiàn)的

//1.定義協(xié)議

protocol HostessDelegate {

func doHousework()

func cook()

func takeCareBaby()

}

//2.定義代理屬性

class hostess: NSObject {

var delegate:HostessDelegate!

//6.通知代理什么時候干活

func cleanHome(){

self.delegate.doHousework()

}

func hungry(){

self.delegate.cook()

}

func working(){

self.delegate.takeCareBaby()

}

}

//給NSobject擴充方法

extension NSObject {

func sayHellow() {

print("你好,集寧師范")

}

}

class Nanny: NSObject {

}

let n = Nanny()

n.sayHellow()

//延展:用來擴充一個類,主要用來管理類的方法,或遵循某個協(xié)議中的方法

//3.遵循協(xié)議

extension Nanny : HostessDelegate{

//4.實現(xiàn)協(xié)議中的方法

func doHousework() {

print("做家務(wù)")

}

func cook() {

print("做飯")

}

func takeCareBaby() {

print("照顧小孩")

}

}

let cuiHua = hostess()? //女主人

let ruHua = Nanny()? //保姆

//5給代理屬性賦值

cuiHua.delegate = ruHua

cuiHua.cleanHome()

cuiHua.working()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容