210508 Sat
12567 ワード
学習内容
参考資料
グローバル変数問題、不良オブジェクト向けコード(メンテナンス失敗) StevenとTILの共有リンク👍
Singleton Patternはグローバル変数の使用が最も有効であると考えている
(グローバル変数の問題を効果的に解決)
1.最初の学習内容:super。init()
super.Init()継承クラスから継承されるクラスの構成を再定義(?)やりたい時.
(たとえば、次のように異なる初期値を追加したい場合)
使用と理解
Initializer Inheritance and Overriding
import Foundation
class Vehicle {
var numberOfWheels = 0
var description: String {
return "\(numberOfWheels) wheel(s)"
}
}
let vehicle = Vehicle()
print("Vehicle: \(vehicle.description)") // Vehicle: 0 wheel(s)
ストアド・プロシージャ番号OfWheelsは、0を初期値として指定します.計算プロセス記述の初期値は指定されません.
この場合、Vehicleクラスはdefault initializerを自動的に受信し、descriptionに0を入れてインスタンスを作成します?!
class Bicycle: Vehicle {
override init() {
super.init()
numberOfWheels = 2
}
}
BicycleはVerhicleのサブクラスですBicycleバージョンの頭文字Lizardaは上書きを表します
Bicycleのinit()はsuperです.Init()の呼び出し時に起動
super.init()BicycleクラスのスーパークラスVerhicleを呼び出すデフォルトの初期化器
まず、VehicleはNumberOfWheelsという継承属性を初期化します.
→Bicycle NumberOfWheelsプロパティを変更する前に
今はsuperInit()を呼び出すとnumberOfWheelsの初期値は0になり、新しい値2に置き換えられます.
let bicycle = Bicycle()
print("Bicycle: \(bicycle.description)")
// Bicycle: 2 wheel(s)
Bicycleインスタンスを作成し、継承されたdescription演算プログラムを呼び出すnumberOfWheels値が0から2に更新されていることがわかります
HoverboardというVehicleを継承する別のクラスを作成
(Hover Boardは電動ホイール付きBoardですのでご注意ください)
class Hoverboard: Vehicle {
var color: String
init(color: String) {
self.color = color
// super.init() implicitly called here
}
override var description: String {
return "\(super.description) in a beautiful \(color)"
}
}
let hoverBoard = Hoverboard(color: "pink")
print("Hoverboard: \(hoverBoard.description)")
// Hoverboard: 0 wheel(s) in a beautiful pink
Hoverboardのinitializerではカラープロファイルのみを定義します大胆なスーパー.Init()を呼び出すのではなく、暗黙的な呼び出しを提供します.
暗示的な呼び出しがoverriver varでdescriptionを定義したということですか?
とにかくこうする方法もあります!
ソース:SWIFT公式ドキュメント-初期化
2.2つ目の学習内容:static var
インスタンス価値とタイプ価値
インスタンスプロセスは、特定のタイプのインスタンスに属するプロセス
新しいタイプのインスタンスを作成するたびに、このインスタンスには独自のProperty Valueパッケージがあります(異なるインスタンスを作成すると、独自のパッケージがあります).
タイプ自体に属するpropertyをタイプpropertyと呼ぶ
このプロシージャは、タイプのインスタンスではなくタイプに属します.
どのようなタイプのインスタンスを作成しても
この番組にはコピーが1つしかありません!
Q.なぜタイプpropertyを使うのですか?
タイプ構成は、特定のタイプのすべてのインスタンスに共通(通常使用)の値を定義するときに便利です.
Type Property Syntax
タイプpropertyを定義するときにstaticキーワードを使用します!
import Foundation
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 1
}
}
enum SomeEnumeration {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 6
}
}
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}
Querying and Setting Type Properties
タイプpropertyもインスタンスpropertyのようにアクセス可能
ただし、タイプの製品はタイプに設定されています.
タイプのインスタンスでは設定されていません.
print(SomeStructure.storedTypeProperty) // Some value.
SomeStructure.storedTypeProperty = "Another value"
print(SomeStructure.storedTypeProperty) // Another value
print(SomeEnumeration.computedTypeProperty) // 6
print(SomeClass.computedTypeProperty) // 27
ソース:SWIFT公式文書-属性3.3つ目の学習内容:override main()
Performing the Main Task
At a minimum, every operation object should implement at least the following methods:
main
main
(Optional) This method is typically used to implement the task associated with the operation object. Although you could perform the task in the start
method, implementing the task using this method can result in a cleaner separation of your setup and task code.Method overriding
Method overriding is a language feature in which a class can provide an implementation of a method that is already provided by one of its parent classes. The implementation in this class replaces (that is, overrides) the implementation in the parent class.
Reference
この問題について(210508 Sat), 我々は、より多くの情報をここで見つけました https://velog.io/@sunnywhynot/210508-Satテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol