CRH高速铁路最高速度300,可乘坐1000乘客
CRH高速铁路最高速度380,可乘坐1000乘客
汽车最高速度120,可乘坐5名乘客,车主是:张三(13888888888)
该车动力类型是:Hybrid
汽车最高速度120,可乘坐5名乘客,车主是:李四(13999999999)
该车动力类型是:Hybrid
汽车最高速度120,可乘坐5名乘客,车主是:王五(13555555555)
该车动力类型是:Hybrid
import Foundation
enum PowerType{
case Electric//表示电力动力
case Petrolic//表示燃油动力
case Hybrid//表示混合动力
}
enum Gender{
case Male//表示男性性别
case Female//表示女性性别
}
struct Owner {
var name:String//字符串类型,表示业主姓名
var genderGender:Gender//枚举类型,表示业主性别
var age:Int//整型,表示业主年龄
var TEL:String//字符串类型,表示业主电话号码
}
protocol WorkSystem{
var powerType : PowerType {get}
mutating func moveMethod(moveDescription:(PowerType)->String)
}
class Vehicle {
var maxSpeed:Int //整型变量,表示交通工具最高运行速度
var passengerNum:Int //整型变量,表示交通工具载客人数
init(maxSpeed:Int,passengerNum:Int) {
self.maxSpeed=maxSpeed
self.passengerNum=passengerNum
}
convenience init(a:Bool){
if(true)
{
self.init(maxSpeed: 1, passengerNum: 1)
}else
{
self.init(maxSpeed: 0, passengerNum: 0)
}
}
func describe() ->String {
return "这是Vehicle"
}
}
class CRH: Vehicle,WorkSystem {
var weight:Int //整型变量,表示高铁的总备重
var powerType: PowerType = PowerType.Electric
func moveMethod(moveDescription: (PowerType) -> String) {
print("该车动力类型是:\(moveDescription(self.powerType))")
}
required init(maxSpeed: Int, passengerNum: Int,weight:Int,powerType: PowerType ) {
self.weight=weight
self.powerType=powerType
super.init(maxSpeed: maxSpeed, passengerNum: passengerNum)
}
convenience init(isCRH380:Bool) {
if(true)
{
self.init(maxSpeed: 380, passengerNum: 1000, weight: 100, powerType: PowerType.Electric)
}
else
{
self.init(maxSpeed: 100, passengerNum: 99, weight: 99, powerType: PowerType.Electric)
}
}
override func describe() ->String {
return "CRH高速铁路最高速度\(self.maxSpeed),可乘坐\(self.passengerNum)乘客"
}
}
class Automobile: Vehicle,WorkSystem {
var weight:Int //整型变量,表示汽车的总备重
var owner:(String,String) //元组类型,表示车主,元组包括车主姓名和电话号,类型均为字符串
var powerType: PowerType = PowerType.Hybrid
var averageSpeed :Double{//表示汽车的平均速度。双精度类型
get
{
return 0.5 * Double(maxSpeed)
}
}
func moveMethod(moveDescription: (PowerType) -> String) {
print("该车动力类型是:\(moveDescription(self.powerType))")
}
required init(maxSpeed: Int, passengerNum: Int,weight:Int ,owner:(String,String),powerType: PowerType)
{
self.weight=weight
self.owner=owner
self.powerType=powerType
super.init(maxSpeed: maxSpeed, passengerNum: passengerNum)
}
override func describe() ->String {
return "汽车最高速度\(self.maxSpeed),可乘坐\(self.passengerNum)名乘客,车主是:\(self.owner.0)(\(self.owner.1))"
}
}
//使用指定构造器构造高铁CRH对象,打印出describe方法返回值
var c1=CRH(maxSpeed: 300, passengerNum: 1000,weight:1000,powerType: PowerType.Electric)
print(c1.describe())
//使用便利构造器构造高铁CRH380对象,打印出describe方法返回值
var c2=CRH(isCRH380:true)
print(c2.describe())
//构造3个车主Owner对象。将3个Owner对象存入字典,字典key为车主姓名,value为车主Owner对象
var o1=("王五","13555555555")
var o2=("张三","13888888888")
var o3=("李四","13999999999")
var a1 = Automobile(maxSpeed: 120, passengerNum: 5,weight:10 ,owner:("王五","13555555555"),powerType: PowerType.Hybrid)
var a2 = Automobile(maxSpeed: 120, passengerNum: 5,weight:10 ,owner:("张三","13888888888"),powerType: PowerType.Hybrid)
var a3 = Automobile(maxSpeed: 120, passengerNum: 5,weight:10 ,owner:("李四","13999999999"),powerType: PowerType.Hybrid)
var dic = ["王五":o1, "张三":o2, "李四":o3]
//遍历存储车主Owner的字典,为每位车主owner构造汽车Automobile对象,并将这3个汽车Automobile对象保存在数组中
var array = [ Automobile]()
for (_,o) in dic
{
var a = Automobile(maxSpeed: 120, passengerNum: 5,weight:10 ,owner:o,powerType: PowerType.Hybrid)
array.append(a)
}
//使用for循环遍历保存Automobile对象的数组。在每次循环中,1)打印汽车Automobile对象的describe方法返回值;2)调用汽车Automobile对象的moveMethod方法,闭包中描述汽车的动力类型
for a in array
{
print(a.describe())
a.moveMethod {(PowerType) -> String in
return "\(PowerType)"
}
}