반응형
구조체라고 하니 C가 생각납니다..
구조체
// 구조체
struct a {
// 구현!
// 일반적 프로퍼티
var b: Int = 10
// 타입 프로퍼티
// 타입 자체에서 접근 가능 전역 클래스 전역 변수 같은건가
static var c: Int = 20
// 마찬가지로 func와 static func를 선언할 수 있다.
func d() {
//
}
static func e() {
//
}
}
// 값 기반이기에 let으로 struct를 선언하면 프로퍼티 값이 var여도 바꿀수 없다.
let example: a = a()
a.b = 20 // 에러
클래스
// 다른 클래스와 다른 점은 다중 상속이 불가능하다는 것
class example {
// 일단 위의 구조체와 다른 부분은 같다.
var change: Int = 10
// 타입 method가 static과 class로 나뉜다.
static func a () {
// 상속시 오버라이딩 불가능
}
class func b () {
// 상속시 오버라이딩 가능
}
}
// 클래스는 참조값이기 때문에 let으로 선언해도 프로퍼티 값 변경이 가능
let ex: example = example()
ex.change = 20 // 이런게 가능
프로퍼티
- 클래스에서 프로퍼티를 잘 활용합시다.
// 프로퍼티
import Foundation
struct Student {
// 인스턴스 저장 프로퍼티 (일반적인 프로터피)
var name: String = "누구누구"
var `class`: String = "Swift"
var koreanAge: Int = 0
// 인스턴스 연산 프로퍼티
// c++과 비슷하네
var westernAge: Int{
get {
return koreanAge - 1
}
set(inputValue) {
koreanAge = inputValue + 1
}
}
// 타입 저장 프로퍼티
static var typeDescription: String = "학생"
// 인스턴스 메서드는 아래의 읽기 전용으로 쓸 수 있다.
func selfIntroduce(){
print("저는 \(self.class)반 \(self.name)입니다.")
}
// 읽기 전용 인스턴스 연산 프로퍼티
var selfIntroduction: String {
get {
return "저는 \(self.class)반 \(self.name)입니다."
}
}
// 타입 메서드는 아래의 읽기 전용 연산 프로퍼티로 쓸 수 있다.
static func selfIntroduce(){
print("학생 타입입니다.")
}
// 읽기 전용 타입 연산 프로퍼티
static var selfIntroduction: String {
return "학생 타입입니다."
}
}
// 타입 연산 프로퍼티
print(Student.selfIntroduction)
// 인스턴스 생성
var example:Student = Student()
example.koreanAge = 20
// 인스턴스 저장 프로퍼티
example.name = "exampleName"
print(example.name)
print(example.koreanAge)
// 인스턴스 연산 프로퍼티 사용
print(example.selfIntroduction)
// 연산 프로퍼티 get 이용
print(example.westernAge)
// 연산 프로퍼티 set 이용
example.westernAge = 30
print(example.koreanAge)
프로퍼티 감시자
- 잘 사용하면 유용한 기능일 듯 하다.
// 프로퍼티 감시자
// 단순하게는 react의 useEffect 같은 개념이라 이해하면 될 듯 하다.
// 연산 프로퍼티와 동시에 사용 할 수 없다.
struct Money{
var currencyRate: Double = 1000 {
// 암시적으로 newRate 를 매개변수를 주지 않고 그냥 사용 가능하다.
// 값이 바뀌기 전 실행
willSet(newRate){ // willSet{print(newRate)} 이렇게도 가능
print("새로운 값 \(newRate)로 바뀔 예정입니다.")
}
// 값이 바뀌고 실행
didSet(newRate){
print("새로운 값 \(newRate)로 바뀌었다.")
}
}
}
// 구조체나 클래스 뿐 아니라 지역,전역 변수에도 사용 가능하다.
반응형
'iOS > Swift' 카테고리의 다른 글
[Swift] 클로저 (0) | 2022.01.23 |
---|---|
[Swift] 열거형 (0) | 2022.01.23 |
[Swift] 옵셔널에 대해 (0) | 2022.01.22 |
[Swift] 조건문, 반복문 (0) | 2022.01.22 |
[Swift] 함수 (0) | 2022.01.22 |