클로저, 고차함수, 프로토콜

이유진·2024년 3월 14일
0

Swift 문법

목록 보기
8/9

클로저

  • 클로저?

    이름이 없는 함수!
    잠깐만 쓰다가 버릴! 함수!!
    이름을 원하는대로 바꿀 수 있다.

    { 매개변수 이름: 매개변수 타입 } → 반환타입 in
    클로저 표현식 코드
    //voide의 리턴
    let test = { () -> () in //input Void (), output Void () 갖는다.
    print("test")
    
    test() //출력: test
  • @escaping

    더 큰 함수가 종료되면 내부의 작은 함수들도 같이 종료되는데,
    escaping을 사용하면 큰 함수 밖에서 사용 가능

    클로저가 함수 밖에서도 사용할 수 있게 해주는 기능이다!

  • 캡쳐

    클로저는 값을 캡쳐할 때 value, reference 타입 관계 없이
    모두 reference 타입으로 캡쳐한다!
    즉, 클로저 외부에 있는 변수의 변경을 클로저 내부에서 할 수 있다!
    =클로저 내부값을 조정하면 외부 변수 변경할 수 있다.


고차함수

  • map 맵
    기존의 데이터를 다른 형태 or 다른 데이터로 변형(매핑) 해준다.
    //ex) 타입의 변경
    let stringArray = ["1", "2", "3"]
    numberArray = strignArray.map {
    			if let changeToInt = Int($0) //조건 순회
    					return changeToInt
    			}
    			return 0 
    }
    print(numberArray)
    // [1, 2, 3, 0]
  • filter 필터
    조건 만족하면 true 아니면 false 값이 나오는데 그 중에서 true인 값만 걸러준다!
    // for 문으로 구현
    // numbers에서 짝수만 추출하기
    
    let numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    var evenNumbers1: [Int] = []
    
    for number in numbers1 {
        if number % 2 == 0 {
            evenNumbers1.append(number)
        }
    }
    print(evenNumbers1) // [2, 4, 6, 8]
    
    // filter로 구현
    // numbers에서 짝수만 추출하기
    
    let numbers2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    let evenNumbers2 = numbers2.filter { n in
        if n%2 == 0 {
            return true // 포함
        } else {
            return false // 포함x (걸러짐)
        }
    }
    print(evenNumbers2)
    
    let evenNumbers3 = numbers2.filter { $0 % 2 == 0 }
    print(evenNumbers3) // [2, 4, 6, 8]
    
    let bigNumber = numbers2.filter { $0 > 7 }
    print(bigNumber) // [8, 9]
  • reduce 리듀스
    두 개의 요소들을 하나씩 반복적으로 연산한다.
    ’초기값’이 존재한다. 요소들이 들어올 때 처음에는 초기값과 연산하고 이후에는 중간결과와 연산한다. 더하고 빼고 곱하고 나눌 때 많이 사용

protocol 프로토콜

  • 프로토콜?
    규약, 조건.
    직접 구현을 하지 않는다.
    get, set 꼭 필요하다.
    무조건 넣어야 하는 약속!
    프로토콜 외에도 다른 요솝11들 넣는 것은 가능!

0개의 댓글