第十七章:协议 第十八章:泛型 第十九章:swift内存管理

源代码:

//第十七章:协议 第十八章:泛型 第十九章:swift内存管理
//Create By ChenZhen


//协议实例方法
//protocol Figure {
//    func onDraw()
//}
//
//class Rectangle: Figure {
//    func onDraw() {
//        print("绘制矩形...")
//    }
//}
//
//class Circle: Figure {
//    func onDraw() {
//        print("绘制圆形...")
//    }
//}
//
//let rect: Figure = Rectangle()
//rect.onDraw()
//
//let circle: Figure = Circle()
//circle.onDraw()


//协议静态方法
//protocol Account {
//    static func interestBy(amount: Double) -> Double
//}
//
//class ClassImp: Account {
//    class func interestBy(amount: Double) -> Double {
//        return 0.0668 * amount
//    }
//}
//
//struct StructImp: Account {
//    static func interestBy(amount: Double) -> Double {
//        return 0.0668 * amount
//    }
//}
//
//enum EnumImp: Account {
//    static func interestBy(amount: Double) -> Double {
//        return 0.0668 * amount
//    }
//}


//协议变异方法
//protocol Editable {
//    mutating func edit()
//}
//
//class ClassImp: Editable {
//    var name = "ClassImp"
//    func edit() {
//        print("编辑ClassImp...")
//        self.name = "编辑ClassImp"
//    }
//}
//
//struct StructImp: Editable {
//    var name = "StructImp"
//    mutating func edit() {
//        print("编辑StructImp...")
//        self.name = "编辑StructImp..."
//    }
//}
//
//enum EnumImp: Editable {
//    case Monday
//    case Tuesday
//    case Wednesday
//    case Thursday
//    case Friday
//    
//    mutating func edit() {
//        print("编辑EnumImp...")
//        self = .Friday
//    }
//}
//
//var classInstance: Editable = ClassImp()
//classInstance.edit()
//
//var StructInstance: Editable = StructImp()
//StructInstance.edit()
//
//var enumInstance: Editable = EnumImp.Monday
//enumInstance.edit()
//print("\(enumInstance)")


//协议实例属性
//protocol Person {
//    var firstName: String { get set }
//    var lastName: String { get set }
//    var fullName: String { get set }
//}
//
//class Employee: Person {
//    var no: Int = 0
//    var job: String?
//    var salary: Double = 0
//    
//    var firstName: String = "chen"
//    var lastName: String = "zhen"
//    
//    var fullName: String {
//        get {
//            return self.firstName + self.lastName
//        }
//        set {
//            var name = newValue.components(separatedBy: ".")
//            self.firstName = name[0]
//            self.lastName = name[1]
//        }
//    }
//}
//
//var per1: Person = Employee()
//per1.fullName = "ya.tou"
//print(per1.fullName)


//协议的合成
//定义轮船协议
//protocol Ship {
//    var displacement: Double { get set }
//}
定义武器协议
//protocol Weapon {
//    var gunNumber: Int { get set }
//}
//
//class WarShip: Ship, Weapon {
//    var displacement = 10_000_000.00
//    var gunNumber = 10
//}
//
//func showWarResource(resource: Ship & Weapon) {
//    print("Ship \(resource.displacement) - Weapon \(resource.gunNumber)")
//}
//
//let ship = WarShip()
//showWarResource(resource: ship)


//扩展遵从协议
//protocol Editable {
//    mutating func edit()
//}
//
//struct Account {
//    var amount: Double = 10.0
//    var owner: String = ""
//}
//
//extension Account: Editable {
//    mutating func edit() {
//        self.amount *= 100
//        self.owner = "chenzhen"
//    }
//}
//
//var account = Account()
//account.edit()
//print("\(account.owner) - \(account.amount)")


//使用泛型函数
//func isEquals<T: Comparable>(a: T, b: T) -> Bool{
//    return (a == b)
//}
//
//let n1 = 200
//let n2 = 200
//print(isEquals(a: n1, b: n2))
//
//let s1 = "ac"
//let s2 = "alll"
//print(isEquals(a: s1, b: s2))


//String类型的结构体队列
//struct Queue<T> {
//    var items = [T]()
//    
//    mutating func queue(item: T) {
//        items.append(item)
//    }
//    
//    mutating func dequeue() -> T? {
//        if items.isEmpty {
//            return nil
//        } else {
//            return items.remove(at: 0)
//        }
//    }
//}
//
//var strQueue = Queue<Any>()
//strQueue.queue(item: 1)
//strQueue.queue(item: 2)
//strQueue.queue(item: 3)
//strQueue.queue(item: 4)
//
//print(strQueue.dequeue()!)
//print(strQueue.dequeue()!)
//print(strQueue.dequeue()!)
//print(strQueue.dequeue()!)


//swift自动引用计数
//class Employee {
//    var no: Int
//    var name: String
//    var job: String
//    var salary: Double
//    
//    init(no: Int, name: String, job: String, salary: Double) {
//        self.no = no
//        self.name = name
//        self.job = job
//        self.salary = salary
//        print("构造成功")
//    }
//    
//    deinit {
//        print("析构成功")
//    }
//}
//
//var ref1: Employee?
//var ref2: Employee?
//var ref3: Employee?
//
//ref1 = Employee(no: 1, name: "cz", job: "CEO", salary: 190000.0)
//ref2 = ref1
//ref3 = ref1
//
//
//ref1 = nil
//ref2 = nil
//ref3 = nil


//强引用循环
//class Employee {
//    var no: Int
//    var name: String
//    var job: String
//    var salary: Double
//    var dept: Department?
//    
//    init(no: Int, name: String, job: String, salary: Double) {
//        self.no = no
//        self.name = name
//        self.job = job
//        self.salary = salary
//        print("员工\(name)已经构造成功")
//    }
//    deinit {
//        print("员工\(name)已经析构成功")
//    }
//}
//
//class Department {
//    var no: Int = 0
//    var name: String = ""
//    var manager: Employee?
//    
//    init(no: Int, name: String) {
//        self.no = no
//        self.name = name
//        print("部门\(name)已经构造成功")
//    }
//    deinit {
//        print("部门\(name)已经析构成功")
//    }
//}
//
//var emp: Employee?
//var dept: Department?
//
//emp = Employee(no: 7698, name: "chenzhen", job: "Salesman", salary: 12000.0)
//dept = Department(no: 30, name: "Sales")
//
//emp!.dept = dept
//dept!.manager = emp
//
//emp = nil
//dept = nil


//弱引用
//class Employee {
//    var no: Int
//    var name: String
//    var job: String
//    var salary: Double
//    weak var dept: Department?
//    
//    init(no: Int, name: String, job: String, salary: Double) {
//        self.no = no
//        self.name = name
//        self.job = job
//        self.salary = salary
//        print("员工\(name)已经构造成功")
//    }
//    deinit {
//        print("员工\(name)已经析构成功")
//    }
//}
//
//class Department {
//    var no: Int = 0
//    var name: String = ""
//    var manager: Employee?
//    
//    init(no: Int, name: String) {
//        self.no = no
//        self.name = name
//        print("部门\(name)已经构造成功")
//    }
//    deinit {
//        print("部门\(name)已经析构成功")
//    }
//}
//
//var emp: Employee?
//var dept: Department?
//
//emp = Employee(no: 7698, name: "chenzhen", job: "Salesman", salary: 12000.0)
//dept = Department(no: 30, name: "Sales")
//
//emp!.dept = dept
//dept!.manager = emp
//
//emp = nil
//dept = nil


//无主引用
//class Employee {
//    var no: Int
//    var name: String
//    var job: String
//    var salary: Double
//    weak var dept: Department?
//    
//    init(no: Int, name: String, job: String, salary: Double) {
//        self.no = no
//        self.name = name
//        self.job = job
//        self.salary = salary
//        print("员工\(name)已经构造成功")
//    }
//    deinit {
//        print("员工\(name)已经析构成功")
//    }
//}
//
//class Department {
//    var no: Int = 0
//    var name: String = ""
//    unowned var manager: Employee
//    
//    init(no: Int, name: String, manager: Employee) {
//        self.no = no
//        self.name = name
//        self.manager = manager
//        print("部门\(name)已经构造成功")
//    }
//    deinit {
//        print("部门\(name)已经析构成功")
//    }
//}
//
//var emp: Employee?
//var dept: Department?
//
//emp = Employee(no: 7698, name: "chenzhen", job: "Salesman", salary: 12000.0)
//dept = Department(no: 30, name: "Sales", manager: emp!)
//
//emp!.dept = dept
dept!.manager = emp
//
//emp = nil
//dept = nil


//闭包中的强引用循环示例
//class Employee {
//    var no: Int = 0
//    var firstName: String
//    var lastName: String
//    var job: String
//    var salary: Double
//    
//    init(no: Int, firstName: String, lastName: String, job: String, salary: Double) {
//        self.no = no
//        self.firstName = firstName
//        self.lastName = lastName
//        self.job = job
//        self.salary = salary
//        print("员工\(firstName)已经构造成功")
//    }
//    deinit {
//        print("员工\(firstName)已经析构成功")
//    }
//    
//    lazy var fullName: () -> String = {
//        return self.firstName + "." + self.lastName
//    }
//}
//
//var emp: Employee? = Employee(no: 7698, firstName: "chen", lastName: "zhen", job: "Salesman", salary: 1600)
//print(emp!.fullName())
//emp = nil


//解决闭包强引用循环
class Employee {
    var no: Int = 0
    var firstName: String
    var lastName: String
    var job: String
    var salary: Double
    
    init(no: Int, firstName: String, lastName: String, job: String, salary: Double) {
        self.no = no
        self.firstName = firstName
        self.lastName = lastName
        self.job = job
        self.salary = salary
        print("员工\(firstName)已经构造成功")
    }
    deinit {
        print("员工\(firstName)已经析构成功")
    }
    
    lazy var fullName: () -> String = {
        [unowned self] () -> String in
        let fn = self.firstName
        let ln = self.lastName
        return fn + "." + ln
    }
}

var emp: Employee? = Employee(no: 7698, firstName: "chen", lastName: "zhen", job: "Salesman", salary: 1600)
print(emp!.fullName())
emp = nil


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值