[동계 모각코] [2회차] 옵셔널 바인딩

MoonGoon·2023년 1월 11일
0

모각코

목록 보기
3/19

optional binding, Chaining, class, property, method

  • 옵셔널 바인딩 - 옵셔널 값을 안전하게 꺼내는 방법
    • 옵셔널 변수에 ! 키워드를 사용하여 옵셔널을 강제로 해제할 수 있다

      • nil 값이 없다고 확신할 경우에만 사용해야 함! (매우 위험)
    • 옵셔널 변수 뒤에 ?? [값] 을 하면 옵셔널 변수가 nil 일 경우 대신해서 들어갈 값을 정해주는 것

    • if문을 사용할 수 있다.

      var nickName: String? = "moon"
      if let nickName = nickName {  // 새로만든 변수 nickName이 nil이 아니면 if문 실행
      	Text(nickName)
      } else {
      		Text("없음")
      }
  • class - struct와는 다른 자원을 공유하는 녀석 class
    • class 는 인스턴스를 만들었을 때 주소를 공유해서 사용한다

      Class

    1. 참조 타입

    2. 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 할당한 모든 변수에 영향을 준다. (메모리만 복사)

      Struct

    3. 값 타입

    4. 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당된다.

  • 옵셔널 체이닝 - 중간에 하나 없어도 괜찮아 nil 이야
    • 어떤 객체를 사용하는데 객체의 프로퍼티중 하나가 옵셔널이면 그 객체를 사용한 것 모두 옵셔널이 되어 안정성을 보장하는 것

      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 라고 한다

      Swift) 열거형(Enumeration) 심화편

    • 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"
      			}
profile
Swift 개발자를 희망합니다

0개의 댓글