----繼承----
//繼承:class之間的“父子”關(guān)系的體現(xiàn)
//子類可以繼承父類的屬性和方法
class Viechle {
var speed = 0
var desc : String {
return "時速是\(speed) km/h"
}
func makeNoise() {
}
}
class Bike : Viechle {
var hasBasket = false
}
let aBike = Bike()
aBike.speed = 30
aBike.desc
aBike.hasBasket
aBike.makeNoise()
//子類可以根據(jù)需要,修改繼承來的屬性和方法(多態(tài))
class CRH : Viechle {
override func makeNoise() {
print("嘟嘟嘟")
}
}
let crh = CRH()
crh.makeNoise()
----初始化----
初始化:描述類/結(jié)構(gòu)體/枚舉實例化時,屬性如何給初始值的方法。形式init(){}。此方法稱之為構(gòu)造器。
//類的定義沒有給屬性默認的值,則需要在init中指定
class RoomTemp {
var season : String
var temp : Int
init(season: String, temp :Int) {
self.season = season
self.temp = temp
}
}
let temp1 = RoomTemp(season: "Spring", temp: 20)
temp1.season
temp1.temp
//結(jié)構(gòu)體定義不需要指定屬性默認的值,因為默認提供一個包含所有屬性初始化的構(gòu)造器
struct RoomTemp1 {
var season : String
var temp : Int
}
let temp2 = RoomTemp1(season: "summer", temp: 30)
//便利構(gòu)造器, 可以通過對主構(gòu)造器的包裝,實現(xiàn)便利的初始化
class Food {
var name : String
init(name : String) {
self.name = name
}
convenience init() {
self.init(name: "飯食")
}
}
let food = Food()
//可失敗構(gòu)造器:針對有可能的初始化失敗,返回nil。比如:初始化一張圖片,如果圖片名不存在,則初始化失敗。
struct Animal {
let name : String
init?(name:String) {
if name.isEmpty {
print("沒有給動物命名")
return nil
}
self.name = name
}
}
let cat = Animal(name: "")
----錯誤處理----
錯誤處理:反映運行出錯的細節(jié),并恢復程序的過程。
可選類型僅處理值缺失,錯誤處理可以針對不同的出錯原因有不同的應(yīng)對
//一個函數(shù)可以加上throws關(guān)鍵字,表示可以處理錯誤,這個函數(shù)的調(diào)用者可以捕獲(catch)這個錯誤并進行應(yīng)對
func aFoo() throws {
print("小波的斗魚直播間")
}
//當你調(diào)用可以拋出錯誤的函數(shù),需在前面加上try關(guān)鍵字
try aFoo()
//處理更細分的錯誤信息,錯誤類型須遵從ErrorType協(xié)議
enum LearningObs : Error {
case noMethod,noReading,noTool(tool : String)
}
func iosDev (method:Bool,style:Bool,hasTool:Bool) throws {
guard method else {
throw LearningObs.noMethod
}
guard style else {
throw LearningObs.noReading
}
guard hasTool else {
throw LearningObs.noTool(tool: "缺少 工具")
}
}
var budget = 7000
func buy(tool:String) {
if budget >= 6000 {
budget -= 6000
print("您已經(jīng)購買",tool,"花費6k,余額為:",budget)
} else {
print("資金不足")
}
}
do {
try iosDev(method: false, style: false, hasTool: false)
print("恭喜,你已經(jīng)開始學習ios開發(fā)")
} catch LearningObs.noMethod {
print("沒有好的學習方法")
} catch LearningObs.noReading {
print("不想看書")
} catch LearningObs.noTool {
buy(tool: "mac")
}
//有時候僅關(guān)心結(jié)果有無,可使用try?或try!來忽略錯誤細節(jié)
if let result = try? iosDev(method: true, style: true, hasTool: false) {
print("恭喜進入學習")
} else {
print("學習條件不足")
}