본문 바로가기
개발/iOS

swift 문법 기초 5/7

by 마자용 2021. 8. 28.
코드 출처 - iOS 프로그래밍을 위한 스위프트 기초

 

  • 클로저 closure
      • 실행 가능한 코드의 블럭이자 1급 시민 (first-citizen)
        • 변수, 상수 등으로의 저장 및 전달매개변수의 전달이 가능하고 반환값이 존재할 수 있음.
      • 함수 → 클로저의 일종 (이름이 있는 클로저임)
      • 정의
        • { (매개변수 목록) -> 반환타입 in /* 실행할 코드 */ }
      • 주로 함수의 전달인자로 많이 사용된다.
        • 실행 가능한 코드들을 묶어 함수로 전달
        • 예시
          • let add: (Int, Int) -> Int
            add = { (a: Int, b: Int) in
            	return a + b
            }
            
            let substract: (Int, Int) -> Int
            substract = { (a: Int, b: Int) in
            	return a - b
            }
            
            let divide: (Int, Int) -> Int
            divide = { (a: Int, b: Int) in
            	return a / b
            }
            
            func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
            	return method(a, b)
            {
            
            var calculated: Int
            calculated = calculate(a: 50, b: 10, method: substract)	// 40
            calculated = calculate(a: 50, b: 10, method: divide) 	// 5
            
            // 함수를 호출할 때 클로저를 작성하여 전달할 수도 있음
            calculated = calculate(a: 50, b: 10, method: { (left: Int, right: Int) -> Int in
            	return left * right
            })
            print(calculated) 	// 500
             
      • 축약을 다양하게 할 수 있다.
        • 후행클로저 - 클로저를 함수의 마지막 전달인자로 작성하는 것
        • 반환타입 생략
          • 당연한 경우 컴파일러도 알 수 있기 때문에 생략 가능하다.
        • 단축인자 이름
          • 클로저의 매개변수 이름 목록이 불필요한 경우 생략 가능하다.
        • 임시적 반환 표현 - 어차피 마지막 줄은 'rutrn 반환값' 이기 때문에 return 키워드를 생략하는 것
        • 예시
          • var result: Int
            
            // 축약 전
            result = calculate(a: 50, b: 10, method: { (left: Int, right: Int) -> Int in
                return left + right
            })
            
            // 축약 후
            result = calculate(a: 50, b: 10) { $0 + $1 }    // $0: 0번째 인자, $1: 1번째 인자
        • 웬만하면 다른 사람들이 알아볼 수 있을 정도로만 축약해야 한다.
      • 읽어보기
  • 프로퍼티 property
    • 구조체, 클래스, 열거형 등 타입과 연관된 값들을 표현할 때 사용
    • 종류
      • 저장 프로퍼티 stored property - 값들을 저장
      • 연산 프로퍼티 computed property - 값들을 연산
    • 역할
      • 인스턴스 프로퍼티 instance property
      • 타입 프로퍼티 type property
    • 읽기전용 연산 프로퍼티 → 앞에 get 붙여주면 됨
      • 읽기, 쓰기 모두 가능하게 하려면 set
    • 매개변수 명을 명시하지 않으면 newValue가 들어온다.
    • 코드
  • 프로퍼티 감시자
    • property observer
    • 프로퍼티의 값이 변경될 때를 감시하고 있다가 원하는 동작을 수행할 수 있도록 도움
    • 블럭 내에 넣어준다. 
      • willSet {}
        • 바뀌기 직전 호출
        • 암시적 매개변수 → newValue
      • didSet {}
        • 바뀐 직후 호출
        • 암시적 매개변수 → oldValue
    • 프로퍼티 감시자와 연산 프로퍼티 기능을 동시에 사용할 수 없다.
      • 프로퍼티 감시자는 저장된 값이 변경되면 호출되는 것이기 때문
    • 지역, 전역 변수 모두에 사용이 가능하다.
    • 코드
  • 상속 inheritance

'개발 > iOS' 카테고리의 다른 글

swift 문법 기초 6/7  (0) 2021.08.30
틀린문제 (스위프트 클로저 퀴즈)  (0) 2021.08.29
[Swift] 함수형 타입 Functional Type  (0) 2021.08.28
swift 문법 기초 4/7  (0) 2021.08.26
틀린 문제 (스위프트 함수 퀴즈)  (0) 2021.08.26

댓글