SWIFT構造VSクラス/列挙
熊に与える授業資料。
StructとClassの共通点いくつかの相関値を1つのデータ型に集約する場合、 が他のオブジェクトや関数などに渡す場合 .インスタンス/タイプメソッド インスタンス/タイプProperty Struct C言語などの構造体よりも多くの機能を有する 継承不可 値タイプ:データ送信時に値をコピーし、 を転送する. SWIFTの大部分の骨格は構造体からなる である. Value type:データ送信時に値をコピーし、 を転送する.参照ではなく他のオブジェクトまたは関数に渡すときにコピーする場合、 .自分を継承する必要がない、または他のタイプを継承する必要がない場合 .
Class類 、伝統的なOPPの観点から見ると単一継承(多く継承しない) 参照タイプ:データの転送時に値を提供するメモリ位置 Appleフレームワークの大部分のスケルトンはクラス です
Enum他言語と異なる列挙型 継承不可 値タイプ:データ送信時に値をコピーし、 を転送する.インスタンス/タイプメソッド SWIFTのすべての基本データ型は構造化された形式を採用している. SWIFTのすべての基本データ型は構造化された形式を採用している. スイスは特に構造体と列挙式を使用するのが好きだ. Appleフレームワークの多くはクラスを使用しています. 構造体/クラスの選択と使用は開発者が担当する.
StructとClassの共通点
Class
Enum
struct ValueType {
var property = 1
}
class ReferenceType {
var property = 1
}
// 첫 번째 구조체 인스턴스
let firstStructInstance = ValueType()
// 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사
var secondStructInstance = firstStructInstance
// 두 번째 구조체 인스턴스 프로퍼티 값 수정
secondStructInstance.property = 2
// 두 번째 구조체 인스턴스는 첫 번째 구조체를 똑같이 복사한
// 별도의 인스턴스이기 때문에
// 두 번째 구조체 인스턴스의 프로퍼티 값을 변경해도
// 첫 번째 구조체 인스턴스의 프로퍼티 값에는 영향이 없음
print("first struct instance property : \(firstStructInstance.property)") // 1
print("second struct instance property : \(secondStructInstance.property)") // 2
// 클래스 인스턴스 생성 후 첫 번째 참조 생성
let firstClassReference = ReferenceType()
// 두 번째 참조 변수에 첫 번째 참조 할당
let secondClassReference = firstClassReference
secondClassReference.property = 2
// 두 번째 클래스 참조는 첫 번째 클래스 인스턴스를 참조하기 때문에
// 두 번째 참조를 통해 인스턴스의 프로퍼티 값을 변경하면
// 첫 번째 클래스 인스턴스의 프로퍼티 값을 변경하게 됨
print("first class reference property : \(firstClassReference.property)") // 2
print("second class reference property : \(secondClassReference.property)") // 2
struct SomeStruct {
// 프로퍼티 생성
var someProperty: String = "Property"
}
// 인스턴스 생성
var someStructInstance: SomeStruct = SomeStruct()
func someFunction(structInstance: SomeStruct) {
// structInstance 값을 복사되어서 전달
var localVar: SomeStruct = structInstance
localVar.someProperty = "ABC"
}
someFunction(someStructInstance)
print(someStructInstance.someProperty) // "Property"
// 값 변화 없음
Class SomeStruct {
// 프로퍼티 생성
var someProperty: String = "Property"
}
// 인스턴스 생성
var someStructInstance: SomeClass = SomeClass()
func someFunction(classInstance: SomeClass) {
// classInstance 참조해서 메모리 위치를 전달
var localVar: SomeClass = structInstance
print(localVar.someProperty) // Property
localVar.someProperty = "ABC"
}
someFunction(someClassInstance)
print(someClassInstance.someProperty) // "ABC"
// 값 변화 있음
SWIFTでの使用Reference
この問題について(SWIFT構造VSクラス/列挙), 我々は、より多くの情報をここで見つけました https://velog.io/@jimmy48/Swift-구조체-vs-클래스열거형テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol