版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Reflection_/article/details/82984287
ß
仅供参考,欢迎指教
import Foundation
// 1
enum PowerType {
case Electric
case Petrolic
case Hybrid
}
// 2
protocol WorkSystem {
var powerType:PowerType{get}
func moveMethod(moveDescription:(PowerType)->String)
}
// 3 交通工具(Vehicle)类
class Vehicle {
var maxSpeed :Int
var passengerNum:Int
init(maxSpeed:Int,passengerNum:Int) {
self.maxSpeed = maxSpeed
self.passengerNum = passengerNum
}
func describe() ->String {
return "该交通工具最高速度是\(maxSpeed)km/h,限载\(passengerNum)人"
}
}
// 4 高铁(CRH)类
class CRH: Vehicle,WorkSystem {
var powerType: PowerType
var weight :Int
init(weight:Int,maxSpeed:Int,passengerNum:Int,powerType:PowerType) {
self.weight = weight
self.powerType = powerType
super.init(maxSpeed: maxSpeed, passengerNum: passengerNum)
å}
override func describe() -> String {
return "CRH最高速度是\(maxSpeed)km/h,可以载\(passengerNum)人"
}
func moveMethod(moveDescription: (PowerType) -> String) {
print(moveDescription(self.powerType))
}
}
// 5 汽车(Automobile)类
class Automobile: Vehicle,WorkSystem {
var powerType: PowerType
var weight :Int
var averageSpeed :Double {
get{
return Double(self.maxSpeed)/2
}
set{
self.maxSpeed=Int(averageSpeed * 2)
}
}
init(weight:Int,maxSpeed:Int,passengerNum:Int,powerType:PowerType) {
self.weight = weight
self.powerType = powerType
super.init(maxSpeed: maxSpeed, passengerNum: passengerNum)
}
override func describe() -> String {
return "汽车最高速度是\(maxSpeed)km/h,限载\(passengerNum)人"
}
func moveMethod(moveDescription: (PowerType) -> String) {
print(moveDescription(self.powerType))
}
}
// 6 渡轮(Ferryboat)类
class Ferryboat: Vehicle ,WorkSystem{
var weight :Int
var name:String?
var powerType: PowerType
init(weight:Int,name:String?, maxSpeed:Int,passengerNum:Int,powerType:PowerType){
self.weight = weight
self.name = name
self.powerType = powerType
super.init(maxSpeed: maxSpeed, passengerNum: passengerNum)
}
func moveMethod(moveDescription: (PowerType) -> String) {
print(moveDescription(self.powerType))
}
subscript(index :Int)-> String {
if index == 0 {
return "我的轮船重量是"+String(self.weight)
}
if index == 1{
if self.name == nil{
return "渡轮没有名字。"
}else{
return self.name! //'!'确定非空变量
}
}
return "下标错误"
}
}
// 7 扩展渡轮Ferryboat类
extension Ferryboat{
var tonnage:Int{
return weight/2000 // 只读计算属性
}
}
//8 执行
//8.1
var crh1 = CRH(weight: 100000, maxSpeed: 300, passengerNum: 1000, powerType: PowerType.Electric)
print(crh1.describe())
//8.2
var autoMAarray = [Automobile]()
for index in 1...5{
if index%2 == 1{
autoMAarray.append(Automobile(weight: 100, maxSpeed: 160, passengerNum: 5, powerType: PowerType.Hybrid))
}else{
autoMAarray.append(Automobile(weight: 100, maxSpeed: 120, passengerNum: 7, powerType: PowerType.Petrolic))
}
}
//8.3
for x in autoMAarray{
print(x.describe())
x.moveMethod(moveDescription: {(PT:PowerType)->String in return "动力来源的类型是: \(PT)"} )
}
//8.4
var myBoat = Ferryboat(weight: 500000, name: "泰坦尼克号", maxSpeed: 90, passengerNum: 1200, powerType: PowerType.Hybrid)
//8.5-8.8
print("我的轮船名字是:" + myBoat[1])
myBoat.name = "长江号"
print("我的轮船名字是:" + myBoat[1])
print("我的轮船排水量是:\(myBoat.tonnage)吨。")