// //枚举的定义
// enum MonthFull {
// case January
// case February
// case March
// case April
// case May
// case June
// case July
// case August
// case September
// case October
// case November
// case December
// }
// //枚举的定义
// enum Month {
// case January,February,March,April,May,June,July,August,September,October,November,December
// }
// //枚举赋值
// var thisMonth = Month.August
// var nextMonth : Month = .September//类型声明后,赋值过程中可以省略枚举类型名
// //读取枚举值
// switch nextMonth {
// case .January, .February, .March, .April, .May, .June : print("It belongs first half year")
// default : print("It belongs second half year")
// }
// //定义原始值
// enum Car:Int{
// case truck = 0
// case sportsCar
// case SUV
// case MPV
// case limo
// }
// //访问原始值
// var myCar=Car.SUV
// var rawValue=myCar.rawValue
// myCar=Car.limo
// rawValue=myCar.rawValue
// let yourCar = Car(rawValue:1)
// //关联值
// enum transportFee {
// case byAir(Int,Int,Int)
// case byCar(Int,Int)
// case byTrain(Int)
// }
// //关联值的赋值
// var fromShanghaiToBeijing = transportFee.byTrain(299)
// fromShanghaiToBeijing = .byAir(800, 230, 50)
// //访问关联值
// switch fromShanghaiToBeijing {
// case .byAir(let ticketFee, let tax, let insurance) : print("The sum fee is \(ticketFee + tax + insurance) by air")
// case .byCar(let fuelFee, let highwayFee) : print("The sum fee is \(fuelFee + highwayFee) by car")
// case .byTrain(let ticketFee) : print("The sum fee is \(ticketFee) by Train")
// }
// //可选型的实现
// var hobby: String?
// hobby = "Basketball"
// hobby = nil
// switch hobby {
// case .none:
// print("No hobby")
// case .some(let hobbyName):
// print("Hobby is \(hobbyName)")
// }
// //2.协议
// //协议的声明
// protocol Person {
// var name: String { get set}
// var age: Int { get }
// }
// //类遵守协议
// class Student:Person{
// var name:String
// var age:Int
// init(){
// name=""
// age=0
// }
// }
// //协议中的关联类型
// protocol Person{
// associatedtype UnknownType
// var name:String{get set}
// var age:Int{get}
// var weight:UnknownType{get}
// }
// class Student:Person{
// var name:String
// var age:Int
// var weight:Double
// init(){
// name = ""
// age = 0
// weight = 0.0
// }
// }
// //协议的继承性
// protocol Person {
// associatedtype UnknownType
// var name : String {get set}
// var age : Int {get set}
// var weight: UnknownType { get }
// func personDescription()
// }
// protocol Student {
// var school : String {get set}
// func studentDescription()
// }
// protocol Graduate : Person, Student {
// var supervisor : String {get set}
// func graduateDescription()
// }
// class ComputerAssociationMember : Graduate {
// var name : String = ""
// var age : Int
// var weight: Double
// var school : String
// var supervisor : String
// func personDescription() {
// print("It's person description")
// }
// func studentDescription() {
// print("It's student description")
// }
// func graduateDescription() {
// print("It's graduate description")
// }
// init(name : String, age : Int, weight: Double, school : String, supervisor :String){
// self.name = name
// self.age = age
// self.weight = weight
// self.school = school
// self.supervisor = supervisor
// }
// }
// let theMember = ComputerAssociationMember(name: "Tom", age: 23, weight: 69.2, school: "BUAA", supervisor: "Ian")
// theMember.personDescription()
// theMember.studentDescription()
// theMember.graduateDescription()
// //3拓展
// //扩展计算属性
// 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")
// var aChick = 2.kg
// var aElephant = 8.ton
// print("aClick is \(aChick)g")
// print("aElephant is \(aElephant)g") //扩展计算属性
// extension Int {
// var kg : Int {return self * 1000 }
// var ton : Int {return self * 1000000}
// }
// //扩展构造器
// 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)
// }
// //练习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 = newValue / speed
// }
// }
// func updateOwnership(newOwner: String, registerDate:String) {
// owner = newOwner
// self.registerDate = registerDate
// }
// func movingVehicle(addedhour: Int) {
// hour += addedhour
// }
// init() {
// owner = ""
// registerDate = String()
// 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: String(), serialNo: "102008930", license: "BJ0515G", producer: "BMW", speed: 150, hour: 0, weight: 3.5)
// myCar.movingVehicle(addedhour: 800)
// myCar.updateOwnership(newOwner: "Sam", registerDate:"1000")
// //练习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 = newValue / 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: String(), serialNo: "102008930", license: "BJ0515G", producer: "BMW", speed: 150, hour: 0, weight: 3.5)
// myCar.movingVehicle(hour: 800)
// myCar.updateOwnership(newOwner: "Sam", registerDate: "10000")
// //练习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
// }
// }
// //4.泛型函数
// func swap2Int( a : inout Int, b : inout Int) {
// let temp = a
// a = b
// b = temp
// }
// var a = 3
// var b = 5
// swap(&a, &b)
// print("a is \(a), b is \(b)")
// func swap2String( a : inout String, b : inout String) {
// let temp = a
// a = b
// b = temp
// }
// var c = "Hello"
// var d = "world"
// print("\(c) \(d)")
// swap(&c, &d)
// print("\(c) \(d)")
// print("a is \(a), b is \(b)")
// print("c is \(c), d is \(d)")
// func swap2Element<T>( a : inout T, b : inout T){
// let temp = a
// a = b
// b = temp
// }
// swap2Element(a: &a, b: &b)
// swap2Element(a: &c, b: &d)
// print("a is \(a), b is \(b)")
// print("c is \(c), d is \(d)")
// //泛型类
// class Car {
// var brand: String
// init(brand: String) {
// self.brand = brand
// }
// }
// class Bike {
// var speed: Int
// init(speed: Int) {
// self.speed = speed
// }
// }
// class Driver<Vehicle> {
// var name: String
// var vehicle: Vehicle
// init(name: String, vehicle: Vehicle) {
// self.name = name
// self.vehicle = vehicle
// }
// }
// let porscheCar = Car(brand: "Porsche")
// let driverTom = Driver(name: "Tom", vehicle: porscheCar)
// let giantBike = Bike(speed: 50)
// let driverSam = Driver(name: "Sam", vehicle: giantBike)