[Swift]初期化(Initializer)-1
18514 ワード
オブジェクトを作成するときは、初期値の生成部分と終了部分を表示します.😀
インスタンスの作成と消滅
頭文字ログインは、クラス、構造体、または列挙インスタンスを使用する初期プロセスです.
また、初期化完了後のインスタンスは使用後に消えます.
作成
初期化プロセスには、新しいインスタンスを使用する準備をするために、ストレージ・プロシージャの初期値を設定するなどが含まれます.
イニシャルliserを定義すると、初期化プロセスを直接実装できます.
構造体とクラスのインスタンスを最初に作成する場合、外部ストレージ・プロシージャは含まれません.
すべてのストレージ・アイテムに
定数として宣言されたストレージプロファイルは、インスタンスの初期化時にのみ値を割り当てることができます.
初回割当て後、値は変更できません.
構造体がユーザ定義の頭文字ライフサイクルを実装していない場合、
パラメータ付きの頭文字タイプライターのメンバーとIzzは、Propertyの名義で提供されます.
クラスは提供されません
値タイプの構造体と列挙形式は、コードの冗長性を除去します.
イニシャルタグ部分初期化を他のイニシャルタグに委任する
初期化委任を実行できます.
ただし、クラスは継承をサポートするため、初期化委任はできません.
ただし、クラスは継承された指定/便利なアルファベット登録によって類似の操作を行うことができる.
この部分は次のPost~
値タイプでは、異なるアルファベットタイプライターを呼び出す場合は、
ユーザー定義の頭文字タイプライターを定義した場合、デフォルトの頭文字タイプライターとメンバーwise頭文字タイプライターは使用できません.
したがって、フォースの初期化を行うには、少なくとも2つのカスタムヘッダライフサイクルを定義する必要があります.
基本的な頭文字アイラインがないので悲しいですか?😢
Extensionを使用して、カスタムイニシャルライフサイクルを実装できます.
要するに、委任初期化により、コードを繰り返し記述することなく、複数のcaseの頭文字ログインを効率的に作成することができる.
失敗する可能性のある頭文字Riser
インスタンスをアルファベットで初期化できない場合が多い.
代表的には、頭文字の伝達パラメータとして誤った値や不適切な値が伝達される場合がある.
失敗する可能性のある頭文字Liserは、クラス、構造体列挙型などとして定義できます.
失敗した可能性のあるイニシャルタイプライターは、失敗した場合に
実際には、失敗する可能性のあるアルファベットを使用してログインしなくても、不適切な値が受信されます.
エラーは単独で処理できるが、より簡潔に処理できるという利点がある.
最初のアルファベットログインが不適切な値で呼び出されると、
インスタンスの消失
クラスのインスタンスは、イニシエータ(Deinitializer)を実装できます.
アルファベットライターとアルファベットライターは反対のキャラクターで、
クラスインスタンスをクリーンアップして、クラスインスタンスが解放される前にクリーンアップできます.
略語はクラスのインスタンスでのみ実現できます.
[図書]SWIFTプログラミング3版-野熊
インスタンスの作成と消滅
頭文字ログインは、クラス、構造体、または列挙インスタンスを使用する初期プロセスです.
また、初期化完了後のインスタンスは使用後に消えます.
作成
初期化プロセスには、新しいインスタンスを使用する準備をするために、ストレージ・プロシージャの初期値を設定するなどが含まれます.
イニシャルliserを定義すると、初期化プロセスを直接実装できます.
class SomeClass {
init() { ... }
}
struct SomeStruct {
init() { ... }
}
enum SomeEnum {
case someCase
init() {
// 열거형은 초기화할 때 반드시 case중 하나가 되어야 한다.
self = .someCase
}
}
プロパティのデフォルト構造体とクラスのインスタンスを最初に作成する場合、外部ストレージ・プロシージャは含まれません.
すべてのストレージ・アイテムに
초깃값
を割り当てる必要があります.// 이니셜라이저를 이용한 할당
struct Location {
var loaction: String
init() {
self.loaction = "KOREA"
}
}
// 프로퍼티에 직접 할당
struct Location {
var loaction: String = "KOREA"
}
// 옵셔널 프로퍼티
struct Location {
var loaction: String?
}
定数パーセント定数として宣言されたストレージプロファイルは、インスタンスの初期化時にのみ値を割り当てることができます.
初回割当て後、値は変更できません.
class Person {
let name: String
init(name: String) {
self.name = name
}
}
let fezz = Person(name: "Fezz")
fezz.name = "yagom" // Error!!
デフォルトの頭文字RiserとMemberwiseの頭文字Riser構造体がユーザ定義の頭文字ライフサイクルを実装していない場合、
パラメータ付きの頭文字タイプライターのメンバーとIzzは、Propertyの名義で提供されます.
クラスは提供されません
struct Way {
var left: Int = 10
var right: Int = -5
}
let bothSide = Way(left: 20, right: 10)
// 기본값이 존재한다면 각각 지정할 수 있다.
let leftSide = Way(left: 5)
let rightSide = Way(right: 20)
委任初期化値タイプの構造体と列挙形式は、コードの冗長性を除去します.
イニシャルタグ部分初期化を他のイニシャルタグに委任する
初期化委任を実行できます.
ただし、クラスは継承をサポートするため、初期化委任はできません.
ただし、クラスは継承された指定/便利なアルファベット登録によって類似の操作を行うことができる.
この部分は次のPost~
値タイプでは、異なるアルファベットタイプライターを呼び出す場合は、
self.init
を使用します.ユーザー定義の頭文字タイプライターを定義した場合、デフォルトの頭文字タイプライターとメンバーwise頭文字タイプライターは使用できません.
したがって、フォースの初期化を行うには、少なくとも2つのカスタムヘッダライフサイクルを定義する必要があります.
基本的な頭文字アイラインがないので悲しいですか?😢
Extensionを使用して、カスタムイニシャルライフサイクルを実装できます.
enum RGBColor {
case red, green, blue
case white
case none
// 사용자 정의 이니셜라이저가 있는 경우,
// init() 메소드를 구현해야 기본 이니셜라이저를 사용할 수 있다.
init() {
self = .none
}
init(color: String) {
switch color {
case "red":
self = .red
case "green":
self = .green
case "blue":
self = .blue
case "redgereenblue"
self = .white
default:
self = .none
}
}
init(color: String, allSelect: Bool) {
self.init(color: allSelect == true ? "redgereenblue" : color)
}
var redPeople = RGBColor(color: "red")
var whitePeople = RGBColor(color: "red", allSelect: true)
}
例題をする時ますますこじつけになりました...要するに、委任初期化により、コードを繰り返し記述することなく、複数のcaseの頭文字ログインを効率的に作成することができる.
失敗する可能性のある頭文字Riser
インスタンスをアルファベットで初期化できない場合が多い.
代表的には、頭文字の伝達パラメータとして誤った値や不適切な値が伝達される場合がある.
失敗する可能性のある頭文字Liserは、クラス、構造体列挙型などとして定義できます.
失敗した可能性のあるイニシャルタイプライターは、失敗した場合に
nil
が返されるので、返却タイプです.実際には、失敗する可能性のあるアルファベットを使用してログインしなくても、不適切な値が受信されます.
エラーは単独で処理できるが、より簡潔に処理できるという利点がある.
enum RGBColor: String {
case red = "빨강"
case green = "초록"
case blue = "파랑"
case white = "흰"
init?(color: String) {
switch color {
case "red":
self = .red
case "green":
self = .green
case "blue":
self = .blue
case "redgereenblue"
self = .white
default:
return nil
}
}
init?(color: String, allSelect: Bool) {
self.init(color: allSelect == true ? "redgereenblue" : color)
}
var people1 = RGBColor(color: "pink") // nil
var people2 = RGBColor(color: "orange", allSelect: false) // nil
var people3 = RGBColor(rawValue: "BlackPink") // nil
var people4 = RGBColor(rawVlue: "white") // white
}
失敗する可能性のあるアルファベット手書きの例として、ますます奇妙な例が使用されています.最初のアルファベットログインが不適切な値で呼び出されると、
nil
が返されます.インスタンスの消失
クラスのインスタンスは、イニシエータ(Deinitializer)を実装できます.
アルファベットライターとアルファベットライターは反対のキャラクターで、
クラスインスタンスをクリーンアップして、クラスインスタンスが解放される前にクリーンアップできます.
略語はクラスのインスタンスでのみ実現できます.
class SomeClass {
deinit { ... }
}
var instance = SomeClass()
instance = nil
📄 リファレンス[図書]SWIFTプログラミング3版-野熊
Reference
この問題について([Swift]初期化(Initializer)-1), 我々は、より多くの情報をここで見つけました https://velog.io/@fezravien/Swift-초기화-Initializer-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol