From 88958a0f71d36b4f4fab6b3717d946204de876eb Mon Sep 17 00:00:00 2001 From: AceVest Date: Tue, 14 Mar 2017 23:54:10 +0800 Subject: [PATCH] swift-Inheritance-Initialization --- .../Contents.swift | 96 ++++++++++ .../Contents.swift | 176 ++++++++++++++++++ .../AcePlay.playground/contents.xcplayground | 2 + .../UserInterfaceState.xcuserstate | Bin 21667 -> 23829 bytes 4 files changed, 274 insertions(+) create mode 100644 learn/AcePlay/AcePlay.playground/Pages/Inheritance.xcplaygroundpage/Contents.swift create mode 100644 learn/AcePlay/AcePlay.playground/Pages/Initialization.xcplaygroundpage/Contents.swift diff --git a/learn/AcePlay/AcePlay.playground/Pages/Inheritance.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Inheritance.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..dc1cf1d --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Pages/Inheritance.xcplaygroundpage/Contents.swift @@ -0,0 +1,96 @@ +//: [Previous](@previous) + +import Foundation + +var str = "Hello, Inheritance" + +//: [Next](@next) + +class Vehicle { + var currentSpeed = 0.0 + var description: String { + return "traveling at \(currentSpeed) miles per hour" + } + + func makeNoise() { + // to do nothing + } +} + +let someVehicle = Vehicle() +print("Vehicle: \(someVehicle.description)") + +class Bicycle: Vehicle { + var hasBasket = false +} +let someBicycle = Bicycle() +someBicycle.hasBasket = true +someBicycle.currentSpeed = 13.5 +print("Bicycle: \(someBicycle.description)") + + +class Tandem: Bicycle { + var currentNumberOfPassengers = 0 +} + +let someTandem = Tandem() +someTandem.hasBasket = true +someTandem.currentSpeed = 19.9 +someTandem.currentNumberOfPassengers = 2 +print("Tandem: \(someTandem.description)") + +// 重写 +// 子类可以为继承来的实例方法,类方法,实例属性,或下标提供自己定制的实现。我们把这种行为叫重写 +// 如果要重写某个特性,你需要在重写定义的前面加上override关键字 +class Train: Vehicle { + override func makeNoise() { + print("Choo Choo") + } +} + +let someTrain = Train() +someTrain.makeNoise() + + +// 重写属性 +// 可以重写继承来的实例属性或类型属性,提供自己定制的 getter 和 setter,或添加属性观察器使重写的属性可以观察属性值什么时候发生改变 +// 可以将一个继承来的只读属性重写为一个读写属性 +// 不可以将一个继承来的读写属性重写为一个只读属性 + +// 如果在重写属性中提供了setter,那么你也一定要提供getter +// 如果不想在重写版本中的getter 里修改继承来的属性值 +// 可以直接通过super.someProperty来返回继承来的值,其中someProperty是要重写的属性的名字 + +class Car: Vehicle { + var gear = 1 + + override var description: String { + return super.description + " in gear \(gear)" + } +} + +let someCar = Car() +someCar.currentSpeed = 72.7 +someCar.gear = 3 +print("Car: \(someCar.description)") + +// 重写属性观察器 +// 可以通过重写属性为一个继承来的属性添加属性观察器 +class AutomaticCar: Car { + override var currentSpeed: Double { + didSet { + gear = Int(currentSpeed/20.0) + 1 + } + } +} +let someAutomaticCar = AutomaticCar() +someAutomaticCar.currentSpeed = 67.3 +print("AutomaticCar: \(someAutomaticCar.description)") + +// 防止重写 +// 以通过把方法,属性或下标标记为final来防止它们被重写,只需要在声明关键字前加上final修饰符即可 +// 例如:final var,final func,final class func,以及final subscript +// 在类扩展中的方法,属性或下标也可以在扩展的定义里标记为final的 +// 可以通过在关键字class前添加final修饰符来将整个类标记为不可被继承的,试图继承这样的类会导致编译报错 + + diff --git a/learn/AcePlay/AcePlay.playground/Pages/Initialization.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Initialization.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..a7ddf9f --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Pages/Initialization.xcplaygroundpage/Contents.swift @@ -0,0 +1,176 @@ +//: [Previous](@previous) + +import Foundation + +var str = "Hello, Initialization" + +//: [Next](@next) + +// 构造过程 + +// 可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值 +// 为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观察者 + +struct Fahrenheit { + var temperature: Double + init() { + temperature = 32.0 + } +} + +// 与下述定义方式等价 +// struct Fahrenheit { +// var temperature = 32.0 +// } + +var f = Fahrenheit() +print("The default temperature is \(f.temperature)° Fahrenheit") + + +// 构造参数 +struct Celsius { + var temperatureInCelsius: Double + init(fromFahrenheit fahrenheit: Double) { + temperatureInCelsius = (fahrenheit - 32.0) / 1.8 + } + + init(fromKelvin kelvin: Double) { + temperatureInCelsius = kelvin - 273.15 + } + + init(_ celsius: Double) { + temperatureInCelsius = celsius + } +} + +let bollingPointOfWather = Celsius(fromFahrenheit: 212.0) +let freezingPointOfWather = Celsius(fromKelvin: 273.15) + + +// 构造器并不像函数和方法那样在括号前有一个可辨别的名字 +// 因此在调用构造器时,主要通过构造器中的参数名和类型来确定应该被调用的构造器 +// 正因为参数如此重要,如果你在定义构造器时没有提供参数的外部名字,Swift会为构造器的每个参数自动生成一个跟内部名字相同的外部名 + +struct Color { + var red, green, blue: Double + + init(red: Double, green: Double, blue: Double) { + self.red = red + self.green = green + self.blue = blue + } + + init(white: Double) { + red = white + green = white + blue = white + } +} + +let magenta = Color(red: 1.0, green: 0.0, blue: 1.0) +let halfGray = Color(white: 0.5) + + +// 如果不通过外部参数名字传值,你是没法调用这个构造器的 +// 只要构造器定义了某个外部参数名,你就必须使用它,忽略它将导致编译错误 +// let green = Color(0.0, 1.0, 0.0) 这段代码会报编译时错误,需要外部名称 +let bodyTemperature = Celsius(37.2) + +// 常量属性的修改&可选属性类型 +class SureyQuestion { + let text: String + var response: String? + + init(text: String) { + // 可以在构造过程中的任意时间点给常量属性指定一个值 + // 一旦常量属性被赋值,它将永远不可更改 + // 对于类的实例来说,它的常量属性只能在定义它的类的构造过程中修改;不能在子类中修改 + self.text = text + } + + func ask() { + print(text) + } +} + + +let beetsQuestion = SureyQuestion(text: "How about beets?") +beetsQuestion.ask() +beetsQuestion.response = "I also like beets. (But not with cheese.)" + + +// 默认构造器 +// 如果结构体或类的所有属性都有默认值,同时没有自定义的构造器,那么 Swift 会给这些结构体或类提供一个默认构造器(default initializers) +class ShoppingListItem { + // name 默认为 nil + var name: String? + + // quantity 默认为 1 + var quantity = 1 + + // purchased 默认为 false + var purchased = false +} + +var someShoppingListItem = ShoppingListItem() + + +// 结构体的逐一成员构造器 +// 除了上面提到的默认构造器,如果结构体没有提供自定义的构造器,它们将自动获得一个逐一成员构造器,即使结构体的存储型属性没有默认值 +struct Size { + var width = 0.0 + var height = 0.0 +} + +let size0 = Size() // 默认构造器 +let size1 = Size(width: 2.3, height: 3.7) // 逐一构造器 + + +// 构造器代理 +// 构造器代理的实现规则和形式在值类型和类类型中有所不同 + +// 值类型(结构体和枚举类型)的构造器代理不支持继承,所以构造器代理的过程相对简单 +// 对于值类型,可以使用self.init在自定义的构造器中引用相同类型中的其它构造器。并且只能在构造器内部调用self.init +// 如果为某个值类型定义了一个自定义的构造器,将无法访问到默认构造器(如果是结构体,还将无法访问逐一成员构造器) +// 如果希望默认构造器、逐一成员构造器以及你自己的自定义构造器都能用来创建实例 +// 可以将自定义的构造器写到扩展(extension)中,而不是写在值类型的原始定义中 + +struct Point { + var x = 0.0, y = 0.0 +} + +struct Rect { + var origin = Point() + var size = Size() + + init() { } + + init(origin: Point, size: Size) { + self.origin = origin + self.size = size + } + + init(center: Point, size: Size) { + let originX = center.x - size.width / 2 + let originY = center.y - size.height / 2 + + self.init(origin: Point(x: originX, y: originY), size: size) + } + + var description: String { + return "LeftBottom(\(origin.x), \(origin.y)) RightTop(\(origin.x+size.width), \(origin.y+size.height))" + } +} + +let basicRect = Rect() +let originRect = Rect(origin: Point(x: 2.0, y: 2.0), size: Size(width: 100, height: 200)) +let centerRect = Rect(center: Point(x: 50, y: 50), size: Size(width: 50, height: 50)) + +print("BasicRect: \(basicRect.description)") +print("OriginRect: \(originRect.description)") +print("CenterRect: \(centerRect.description)") + + +// 类的继承和构造过程 + + diff --git a/learn/AcePlay/AcePlay.playground/contents.xcplayground b/learn/AcePlay/AcePlay.playground/contents.xcplayground index 7a38434..17e0832 100644 --- a/learn/AcePlay/AcePlay.playground/contents.xcplayground +++ b/learn/AcePlay/AcePlay.playground/contents.xcplayground @@ -11,5 +11,7 @@ + + \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index e07186e958dbf8c34d82a238656037c97603a052..ed698a8a9ea0ad1be45cd5768644ae5085823739 100644 GIT binary patch literal 23829 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 literal 21667 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 UexHUPQuqBZ+xY+fza0br521!j&j0`b -- 2.44.0