728x90
사용자 정의 타입
구조체
value 타입
struct Sample {
// instance property
var mutableProperty: Int = 100;
let immutableProperty: Int = 200;
// type property
static var typeProperty: Int = 100;
// 인스턴스 메서드
func instanceMethod() {
print("instance method")
}
// 타입 메서드
static func typeMethod() {
print("type method")
}
}
가변 인스턴스로 선언하면 가변 프로퍼티는 변경 가능, 불변 프로퍼티는 변경 불가능
불변 인스턴스로 선언하면 가변 프로퍼티도 변경 불가능
인스턴스 메서드: 인스턴스를 선언한 이후에 사용할수 있는 메서드
타입 메서드: 타입에서 사용하는 메서드. 인스턴스에서는 타입 프로퍼티나 타입 메서드를 사용할수 없음
클래스
구조체와 비슷함
reference 타입
다중 상속이 되지 않음
상속후 재정의가 가능한 class 타입 메서드
상속후 재정의 불가능한 static 타입 메서드
열거헝 enum
value 타입
이름은 대문자 카멜케이스 사용
case는 소문자 카멜케이스 사용
케이스는 한 줄에 여러개도 정의할수 있음
enum Weekday {
case mon
case tue
case wed
case thu, fri, sat, sun
}
switch 의 비교값에 열거형이 들어가는 경우
switch day {
case .mon, .tue, .wed, .thu:
print("평일")
case Weekday.fri:
print("불금!!")
case .sat, .sun:
print("주말!!")
}
- 모든 케이스를 작성하지 않는다명 default 필요
원시값: c언어의 enum 처럼 정수값 할당
enum Fruit: Int {
case apple = 0
case grape
case peach
}
print("\\(Fruit.peach.rawValue)")
- 정수값 말고 다른 타입의 값도 지정할수 있음
- 원시값 타입이 String일때 case의 값이 지정되지 않으면 case의 이름을 사용
열거형에 메서드도 추가가능
클로저
{ (매개변수 목록) -> 반환타입 in
실행 코드
}
// sum이라는 상수에 클로저를 할당
let sum: (Int, Int) -> Int = { (a: Int, b: Int) in
return a + b
}
let sumResult: Int = sum(1, 2)
print(sumResult) // 3
코드의 블럭
일급시민으로, 전달인자, 변수, 상수 등으로 저장, 전달이 가능함
콜백함수(함수의 전달인자로 들어가는 함수)처럼 사용가능
후행 클로저
클로저가 함수의 마지막 전달 인자라면 마지막 매개변수 이름을 생략한뒤 함수 소괄호 외부에 클로저를 구현할수 있음
반환타입 생략
컴파일러가 추론가능해서 생략가능. 이경우 in은 생략불가능
단축 인자이름
이름이 불필요한경우 매개변수 순서대로 $0, $1 처럼 표현할수 있음
암시적 반환 표현
클로저가 반환하는 값이 있으면 클로저의 마지막 줄의 결과값은 반환값으로 취급함
한줄로 축약이 가능
'STUDY > Swift & iOS' 카테고리의 다른 글
Swift 문법 기초 6 (0) | 2022.06.25 |
---|---|
Swift 문법 기초 5 (0) | 2022.06.21 |
Swift 문법 기초 3 (0) | 2022.06.13 |
Swift 문법 기초 2 (0) | 2022.06.09 |
Swift 문법 기초 1 (0) | 2022.06.07 |