옵셔널 변수에 !
키워드를 사용하여 옵셔널을 강제로 해제할 수 있다
옵셔널 변수 뒤에 ?? [값]
을 하면 옵셔널 변수가 nil
일 경우 대신해서 들어갈 값을 정해주는 것
if문을 사용할 수 있다.
var nickName: String? = "moon"
if let nickName = nickName { // 새로만든 변수 nickName이 nil이 아니면 if문 실행
Text(nickName)
} else {
Text("없음")
}
class 는 인스턴스를 만들었을 때 주소를 공유해서 사용한다
Class
참조 타입
같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 할당한 모든 변수에 영향을 준다. (메모리만 복사)
Struct
값 타입
구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당된다.
어떤 객체를 사용하는데 객체의 프로퍼티중 하나가 옵셔널이면 그 객체를 사용한 것 모두 옵셔널이 되어 안정성을 보장하는 것
struct Student {
let name: String
let age: Int
}
struct Pet {
let name: String
let age: Int
}
struct MyOptionalChaining: View {
let moon = Student(name:"m00n", pet: Pet(name: "kkami", age: 7))
var body: some View {
VStack {
Text(moon.name)
if let petName = moon.pet?.name {
// pet이 있을 수도 있고 없을 수도 있음, pet이 없을 경우는 nil 이므로 출력하지 않음
Text(petName)
}
}
}
}
코드 블럭을 가지고 호출할 수 있는 것
메소드
enum, struct, class 안에서 되는 함수
열거형의 사용: 선택지가 한정되어 안전하게 사용 가능
enum 사용 시 값을 붙여서 보낼 수 있음 ex) case coffee(hasMilk: Bool)
이를 연관값 Associated value 라고 한다
enum에도 프로퍼티가 들어올 수 있다
enum Drink {
case coffee(hasMilk: Bool)
case juice
case soft(color: Color)
var name: String {
switch self {
case .coffee(hasMilk: let hasmilk):
if hasMilk {
return "latte"
} else {
return "americano"
}