[Swift] 프로퍼티
프로퍼티
클래스, 구조체 또는 열거형 등에 관련된 값 -> 인스턴스의 값
저장 프로퍼티 (클래스, 구조체)
클래스나 구조체에 저장된 값
/ in struct...
struct Pig {
var name: String
let gender:String
}
var pig = Pig(name: "꿀꿀이", gender: "수컷")
pig.name = "멧돼지"
// pig.gender = "암컷" // Error : gender가 상수로 선언
// 인스턴스 자체를 상수로 선언했을 때,
let pig2 = Pig(name: "왕돼지", gender: "수컷")
//pig.name = "작은돼지" // Error : 프로퍼티도 모두 상수로 되어서 에러 발생, 구조체는 value 타입이기 때문!
// in Class
class Cow {
var name:String
let gender:String
init(name:String, gender: String) {
self.name = name
self.gender = gender
}
}
let cow = Cow(name: "물소", gender : "수컷")
cow.name = "황소"
print(cow.name) // "황소" 에러가 나지 않는 이유 : Class는 참조 타입라서 가능하다.
연산 프로퍼티 (클래스, 구조체, 열거형)
값을 직접적으로 저장하는 대신에, getter와 setter를 사용해서 다른 프로퍼티에 접근 가능
struct Stock {
var averagePrice: Int
var quantity: Int
var purchasePrice : Int {
get {
return averagePrice * quantity
}
set(newPrice) {
averagePrice = newPrice / quantity
}
}
}
var stock = Stock(averagePrice: 2300, quantity : 3)
stock.purchasePrice // 6900, 연산 프로퍼티에 접근하면 get 블록 안의 코드가 실행된다.
stock.purchasePrice = 3000
stock.averagePrice // 1000, 연산 프로퍼티의 값이 바뀌면 set 블록 안의 코드가 실행된다.
프로퍼티 옵저버
class Account {
var credit : Int = 0 {
// 소괄호로 이름 지정 가능 (default : newValue / oldValue)
willSet {
print("변경 예정 : \(newValue)")
}
didSet {
print("변경 전 : \(oldValue)")
}
}
}
// willSet - 값이 저장되기 직전에 불리는 옵저버
// didSet - 값이 저장된 직후에 불리는 옵저버
var account = Account()
account.credit = 1000 // 변경 예정 : 1000 , 변경 전 : 0
타입 프로퍼티
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty : Int {
return 1
}
}
SomeStructure.computedTypeProperty // 1
SomeStructure.storedTypeProperty // Some value.
SomeStructure.storedTypeProperty = "Daeseong"
SomeStructure.storedTypeProperty // Daeseong
변수에 클래스나 구조체를 할당해 인스턴스 없이도 값에 접근이 가능하다.
Author And Source
이 문제에 관하여([Swift] 프로퍼티), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@daeseongkim/Swift-프로퍼티저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)