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()