構文の切り替え:構造体とクラス
構造とクラス構造体の例→値タイプ クラスのインスタンス→参照タイプ こうぞうたい let、varはいずれも 継承が受信されると、クラス名の後にコロン(:)が付けられ、親クラス名に が付けられます.インスタンスが生成されると、初期化時に頭文字Riserが使用されます. **上記のコード例ではclass property値のデフォルト値が設定されていますので、初期化時にパラメータを渡す必要はありません.後で変更できます.
注:swiftでは、インスタンスは「オブジェクト」よりもよく使用されます.構造とは異なり、インスタンスは参照タイプであるため、let宣言インスタンスによって内部属性値 を変更することができる.は、インスタンスを参照する必要がなくなるときに、インスタンス をメモリから解放するために使用される.メソッド呼び出し パラメータX、戻り値X
構造とクラスの違い構造体は を継承することができない.型鋳造はクラスインスタンス のみを許容する. Deinitはクラス のみ参照カウントは、インスタンス にのみ使用する.
最大の違い:値タイプまたは参照タイプ**
値タイプと参照タイプ
→「何を伝えますか?」
値タイプ:渡す値をコピー(call by value)
参照タイプ:参照(アドレス)転送(call by reference)ex.ポインタ
→ただしここでは*
構造/値タイプex)
クラスインスタンス間の参照相は を同時に用いる. Identity Operator String、Int、Array、Dictionary、Setなど →これはすべての基本データ型が値型であることを意味する
struct BasicInformation{
var name: String
var age: Int
}
→インスタンス作成後、ピリオド(.)使用var info: BasicInformation = BasicInformation(name: "yagom", age: 25)
//BasicInformation() 초기화를 해야하 함
let info2: BasicInformation = BasicInformation(name: "jack", age: 21)
info2.name = "alex" //상수니까 변경 불가
カテゴリclass Person{
var height: Float = 0.0
var weight: Float = 0.0
}
//기본값을 0.0으로 지정해주는 것.
//프로퍼티만 정의해준 것임
注:swiftでは、インスタンスは「オブジェクト」よりもよく使用されます.
var yagom: Person = Person()
yagom.height = 12.3
yagom.weight = 12.42
let jenny: Person = Person()
jenny.weight = 24.3
Deinitializerclass Person{
var height: Float = 0.0
var weight: Float = 0.0
deinit{
print("소멸")
}
}
var yagom: Person? = Person()
yagom = nil
→Denitメソッドを単独で呼び出すのではなく、インスタンスにnil値を割り当てる場合は、自分でDenitを呼び出して破棄する構造とクラスの違い
最大の違い:値タイプまたは参照タイプ**
値タイプと参照タイプ
→「何を伝えますか?」
値タイプ:渡す値をコピー(call by value)
参照タイプ:参照(アドレス)転送(call by reference)ex.ポインタ
→ただしここでは*
構造/値タイプex)
struct BasicInformation{
let name: String
var age: Int
}
var yagomInfo: BasicInformation = BasicInformation(name: "yagom", age: 99)
yagomInfo.age = 100
//friendInfo 에 yagomInfo 의 값을 "복사"하여 할당 (extra memory)
var friendInfo: BasicInformation = yagomInfo
print("yagom's age: \(yagomInfo.age)")
print("friend's age: \(friendInfo.age)")
friendInfo.age = 25
//friendInfo 는 별도의 메모리를 할당 받았기 때문에 yagomInfo.age 에는 값 변경 X
func changeBasicInfo(_ info: BasicInformation){
var copiedInfo: BasicInformation = info
copiedInfo.age = 1
}
changeBasicInfo(yagomInfo)
print("yagom's age: \(yagomInfo.age)")
//call by reference 가 아닌 call by value 이기 때문에 따로 값이 변경되지 않고 그대로 100임
クラス/参照タイプex)class Person{
var height: Float = 0.0
var weight: Float = 0.0
}
var yagom: Person = Person()
var friend: Person = yagom
//yagom의 참조를 할당한다
friend.height = 182.3
print("yagom height: \(yagom.height)")
//friend.height 을 바꿨음에도 불구하고 yagom.height 도 같이 변경된다
//같은 메모리를 참조하기 때문
func changePersonInfo(_ info: Person){
info.height = 155.2
}
changePersonInfo(yagom)
print("yagom height: \(yagom.height)")
//Call by reference 이기 때문에 실제 값이 변화되어 155.2 출력
識別演算子var yagom: Person = Person()
let friend: Person = yagom
let anotherFriend: Person = Person()
print(yagom === friend) //true
print(yagom === anotherFriend) //false
print(friend !== anotherFriend) //true
**スイッチの基本データ型はすべて構造化されていますpublic struct String{
public init()
}
Reference
この問題について(構文の切り替え:構造体とクラス), 我々は、より多くの情報をここで見つけました https://velog.io/@kevinkim2586/스위프트-문법-구조체와-클래스テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol