编辑代码

//扩展计算属性
extension Int {
    var kg  : Int {return self * 1000 }
    var ton : Int {return self * 1000000}
}
var aChick = 2.kg
var aElephant = 8.ton
print("aClick is \(aChick)g")
print("aElephant is \(aElephant)g") //扩展计算属性
//扩展构造器
struct Student {
    var name : String
    var id : String
    var age : Int
    init(){
        name = ""
        id = ""
        age = 0
    }
}
extension Student {
    init(name : String, id : String, age : Int){
        self.name = name
        self.id = id
        self.age = age
    }
}
let theStudent = Student(name: "Jack", id: "37060115", age: 18)
print(theStudent)
//扩展方法
struct Student {
    var name : String
    var id : String
    var age : Int
    init(){
        name = ""
        id = ""
        age = 0
    }
}
extension Student {
    init(name : String, id : String, age : Int){
        self.name = name
        self.id = id
        self.age = age
    }
    func description(){
        print("\(name)'s age is \(age) and id is \(id)")
    }
}
let theStudent = Student(name: "Jack", id: "37060115", age: 18)
theStudent.description()
//扩展下标
struct Student {
    var name : String
    var id : String
    var age : Int
    init(){
        name = ""
        id = ""
        age = 0
    }
}
extension Student {
    init(name : String, id : String, age : Int){
        self.name = name
        self.id = id
        self.age = age
    }
}
struct Class {
    var students = [Student]()
}
extension Class {
    subscript(Index : Int) -> String{
        return students[Index].name
    }
}
var theClass = Class()
theClass.students.append(Student(name: "Sam", id: "0", age: 16))
theClass.students.append(Student(name: "Tom", id: "1", age: 18))
theClass.students.append(Student(name: "Jeff", id: "2", age: 19))
let oneStudentName = theClass[0]
print(oneStudentName)
//练习
class Founder {
    var surname: String
    var lastname: String
    init() {
        surname = ""
        lastname = ""
    }
}
extension Founder {//扩展计算属性
    var fullname: String { return lastname + " " + surname }
}
let founderOfApple = Founder()
founderOfApple.surname = "Jobs"
founderOfApple.lastname = "Steve"
print(founderOfApple.fullname)
class Founder {
    var surname: String
    var lastname: String
    init() {
        surname = ""
        lastname = ""
    }
}
extension Founder {//扩展构造器
    var fullname: String { return lastname + " " + surname }
    convenience init(surname: String, lastname: String) {
        self.init()
        self.surname = surname
        self.lastname = lastname
    }
}
let founderOfApple = Founder(surname: "Jobs", lastname: "Steve")
print(founderOfApple.fullname)
class Founder {
    var surname: String
    var lastname: String
    init() {
        surname = ""
        lastname = ""
    }
}
extension Founder {
    var fullname: String { return lastname + " " + surname }
    convenience init(surname: String, lastname: String) {
        self.init()
        self.surname = surname
        self.lastname = lastname
    }
    func description() {//扩展方法
        print("Founder is \(fullname)")
    }
}
let founderOfApple = Founder(surname: "Jobs", lastname: "Steve")
founderOfApple.description()
class Founder {
    var surname: String
    var lastname: String
    init() {
        surname = ""
        lastname = ""
    }
}
extension Founder {
    var fullname: String { return lastname + " " + surname }
    convenience init(surname: String, lastname: String) {
        self.init()
        self.surname = surname
        self.lastname = lastname
    }
    func description() {
        print("Founder is \(fullname)")
    }
}
struct ManagementTeam {
    var managers = [Founder]()
}
extension ManagementTeam {
    subscript(Index: Int) -> String {//扩展下标
        return managers[Index].fullname
    }
}
let founder1 = Founder(surname: "Jobs", lastname: "Steve")
let founder2 = Founder(surname: "Wotzniak", lastname: "Stephen")
let founder3 = Founder(surname: "Wayne", lastname: "Ron")
var appleManagementTeam = ManagementTeam()
appleManagementTeam.managers.append(founder1)
appleManagementTeam.managers.append(founder2)
appleManagementTeam.managers.append(founder3)
print("Apple Corporation's management team consists of:")
for manager in appleManagementTeam.managers {
    print(manager.fullname)
}
//4.
//练习1-4
protocol Ownership {
    var owner: String{ get }
    var registerDate: String{ get }
    var serialNo: String{ get }
    func updateOwnership(newOwner: String, registerDate: String)
}
protocol Vehicle {
    associatedtype WeightType
    var license: String{ get }
    var producer: String{ get }
    var speed: Int{ get }
    var hour: Int{ get }
    var distance: Int{ get set }
    var weight: WeightType { get }
    func movingVehicle(addedhour: Int)
}
class Car : Ownership, Vehicle {
    var owner: String
    var registerDate: String
    var serialNo: String
    var license: String
    var producer: String
    var speed: Int
    var hour: Int
    var weight: Double
    var distance: Int {
        get {
            return speed * hour
        }
        set {
            hour = distance / speed
        }
    }
    func updateOwnership(newOwner: String, registerDate: String) {
        owner = newOwner
        self.registerDate = registerDate
    }
    func movingVehicle(addedhour: Int) {
        hour += addedhour
    }
    init() {
        owner = ""
        registerDate = ""
        serialNo = ""
        license = ""
        producer = ""
        speed = 0
        hour = 0
        weight = 0.0
    }
    init(owner: String, registerDate: String, serialNo: String, license: String, producer: String, speed: Int, hour: Int, weight: Double) {
        self.owner = owner
        self.registerDate = registerDate
        self.serialNo = serialNo
        self.license = license
        self.producer = producer
        self.speed = speed
        self.hour = hour
        self.weight = weight
    }
}
let myCar = Car(owner: "Tom", registerDate: "2023-9-18", serialNo: "102008930", license: "BJ0515G", producer: "BMW", speed: 150, hour: 0, weight: 3.5)
myCar.movingVehicle(addedhour: 800)
myCar.updateOwnership(newOwner: "Sam", registerDate: "10000")
print("owner: \(myCar.owner)\nregisterDate: \(myCar.registerDate)\nserialNo: \(myCar.serialNo)\nlicense: \(myCar.license)\nproducer: \(myCar.producer)\nspeed: \(myCar.speed)\nhour: \(myCar.hour)\nweight: \(myCar.weight)")
//练习5
protocol Ownership {
    func updateOwnership(newOwner: String, registerDate: String)
}
protocol Vehicle {
    func movingVehicle(hour: Int)
}
class Car {
    var owner: String
    var registerDate: String
    var serialNo: String
    var license: String
    var producer: String
    var speed: Int
    var hour: Int
    var weight: Double
    var distance: Int {
        get {
            return speed * hour
        }
        set {
            hour = distance / speed
        }
    }
    init(owner: String, registerDate: String, serialNo: String, license: String, producer: String, speed: Int, hour: Int, weight: Double) {
        self.owner = owner
        self.registerDate = registerDate
        self.serialNo = serialNo
        self.license = license
        self.producer = producer
        self.speed = speed
        self.hour = hour
        self.weight = weight
    }
}
extension Car: Ownership, Vehicle {
    func updateOwnership(newOwner: String, registerDate: String) {
        owner = newOwner
        self.registerDate = registerDate
    }
    func movingVehicle(hour: Int) {
        self.hour += hour
    }
}
let myCar = Car(owner: "Tom", registerDate: "2023-9-18", serialNo: "102008930", license: "BJ0515G", producer: "BMW", speed: 150, hour: 0, weight: 3.5)
myCar.movingVehicle(hour: 800)
myCar.updateOwnership(newOwner: "Sam", registerDate: "10000")
print("distance: \(myCar.distance)")
print("owner: \(myCar.owner)\nregisterDate: \(myCar.registerDate)\nserialNo: \(myCar.serialNo)\nlicense: \(myCar.license)\nproducer: \(myCar.producer)\nspeed: \(myCar.speed)\nhour: \(myCar.hour)\nweight: \(myCar.weight)")
//练习6-9
protocol ConsumerGoods{
    var price: Double { get }
    var type: String { get }
    var produceDate: String { get }
    func consumerGoodsInfo()
}
protocol ElectricAppliance{
    var power: Int { get }
    var energyConsumptionLevel: Int { get }
    var use: String { get }
    func electricApplianceInfo()
}
protocol DomesticAppliance: ConsumerGoods, ElectricAppliance {
    var discount: Double { get }
    var location: String { get }
    func domesticApplianceInfo()
}
class AirConditioner: DomesticAppliance {
    var price: Double
    var type: String
    var produceDate: String
    var power: Int
    var energyConsumptionLevel: Int
    var use: String
    var discount: Double
    var location: String
    func consumerGoodsInfo() {
        print("Price:\(price), Type:\(type), Produce Date:\(produceDate)")
    }
    func electricApplianceInfo() {
        print("Power:\(power), energy consumption level:\(energyConsumptionLevel), use:\(use)")
    }
    func domesticApplianceInfo() {
        print("Discount:\(discount), location:\(location)")
    }
    init(price: Double, type: String, produceDate: String, power: Int, energyConsumptionLevel: Int, use: String, discount: Double, location: String) {
        self.price = price
        self.type = type
        self.produceDate = produceDate
        self.power = power
        self.energyConsumptionLevel = energyConsumptionLevel
        self.use = use
        self.discount = discount
        self.location = location
    }
}