import Swift
struct Student {
// 인스턴스 저장 프로퍼티
var name: String = ""
var `class`: String = "Swift"
var koreanAge: Int = 0
// 인스턴스 연산 프로퍼티
var westernAge: Int {
get {
return koreanAge - 1
}
set(inputValue){
koreanAge = inputValue + 1
}
}
// 타입 저장 프로퍼티
static var typeDescription: String = "학생"
// 읽기전용 인스턴스 연산 프로퍼티
var selfIntroduction: String {
get {
return "저는 \(self.class)반 \(name)입니다"
}
}
// 읽기전용 타입 연산 프로퍼티
// 읽기전용에서는 get을 생략할 수 있습니다.
static var selfIntroduction: String {
return "학생타입입니다"
}
}
// 타입 연산 프로퍼티 사용
print(Student.selfIntroduction)
// 인스턴스 생성
var senior: Student = Student()
senior.koreanAge = 10
// 인스턴스 저장 프로퍼티 사용
senior.name = "성인"
print(senior.name)
// 인스턴스 연산 프로퍼티 사용
print(senior.selfIntroduction)
print("제 한국나이는 \(senior.koreanAge)살이고, 미국나이는 \(senior.westernAge)살입니다.")
struct Money {
var currencyRate: Double = 1100
var dollar: Double = 0
var won: Double {
get {
return dollar * currencyRate
}
set {
dollar = newValue / currencyRate
}
}
}
var moneyInMyPocket = Money()
moneyInMyPocket.won = 11000
print(moneyInMyPocket.won)
moneyInMyPocket.dollar = 10
print(moneyInMyPocket.won) // 11000
var a: Int = 100
var b: Int = 200
var sum: Int {
return a + b
}
print(sum) // 300
// 프로퍼티 감시자
struct Money2 {
// 프로퍼티 감시자 사용
var currencyRate: Double = 1100 {
willSet(newRate){
print("환율이 \(currencyRate)에서 \(newRate)으로 변경될 예정입니다.")
}
didSet(oldRate){
print("환율이 \(oldRate)에서 \(currencyRate)으로 변경되었습니다.")
}
}
// 프로퍼티 감시자 사용
var dollar: Double = 0 {
// willSet의 암시적 매개변수 이름 newValue
willSet {
print("\(dollar)달러에서 \(newValue)달러로 변경될 예정입니다")
}
// didSet의 암시적 매개변수 이름 oldValue
didSet {
print("\(oldValue)달러에서 \(dollar)달러로 변경되었습니다")
}
}
// 연산 프로퍼티
var won: Double {
get {
return dollar * currencyRate
}
set {
dollar = newValue / currencyRate
}
}
}
var moneyInMyPocket2: Money2 = Money2()
moneyInMyPocket2.currencyRate = 1150
moneyInMyPocket2.dollar = 10
print(moneyInMyPocket2.won)
/*
프로퍼티 감시자의 기능은
함수, 메서드, 클로저, 타입 등의 외부에 위치한
지역/전역 변수에도 모두 사용 가능합니다.
*/
var c: Int = 100 {
willSet {
print("\(c)에서 \(newValue)로 변경될 예정입니다.")
}
didSet {
print("\(oldValue)에서 \(c)로 변경되었습니다")
}
}
c = 200
'Swift > 기초&문법' 카테고리의 다른 글
스위프트 swift 인스턴스 생성 소멸 (0) | 2018.09.04 |
---|---|
스위프트 swift 상속 (0) | 2018.09.03 |
스위프트 swift 클로저 (0) | 2018.08.30 |
스위프트 swift class vs struct / enum 클래스 vs 구조체 / 열거형 (0) | 2018.08.29 |
스위프트 swift imagepicker delegate 사진선택 (0) | 2018.08.28 |