[Swift] 기초문법 04

최정은·2023년 8월 15일
0

Swift

목록 보기
4/27

클로져 (closure)

  • 함수와 동일하게 어떤 태스크를 수행하기 위한 코드 블록
  • 두 가지로 나눌 수 있음
    • 이름이 있는 클로져 → 함수
    • 이름이 없는 클로져 → 이번에 배울것
    { 
    	(parameters) -> return type in 
     	  statements
    }
  • in 기준으로 클로져 선언부클로져 실행부 가 나뉨
    - 클로져 선언부: 파라미터와 리턴타입 명시
    - 클로져 실행부: 실행 코드 작성
  • swift 에서는 클로져, 함수를 타입으로 사용할수 있음
    • 따라서, 변수에 할당할수 있고, 다른 함수 파라미터로 전달할수도 있음

생성

let checking = { (id: String) -> Bool in
  if id == "User000" {
		return false
	}

	return true
}

let isValid = checking("User123") // true 

closure as parameter

  • 클로져는 함수 파라미터로 받을수도 있음
func validate(id: String, checking: (String) -> Bool) -> Bool {
    // Some Preparation work here..
    print("Validation 준비중...")
    let isValid = checking(id)
    return isValid
}


let validationResult = validate(id: "User002", checking: checking) // true


// return 이 없는 클로져의 경우 "-> Void" 통해서 반환시키는 것이 없음을 표시함 

let printHello = {
    print("Hello Swift")
}

func doSomeClosure(_ action: () -> Void) {
    action()
}

doSomeClosure(printHello)
  • closure 를 따로 만들어 놓지 않고, 함수 수행시 바로 작성하기
let validationResult2 = validate(id: "User001", checking: { (id: String) in
    if id == "User000" {
          return false
      }

      return true
})

closure 줄여보기

// 길게
let validationResult2 = validate(id: "User001", checking: { (id: String) in
    if id == "User000" {
          return false
      }

      return true
})


// 중간 단계
let validationResult3 = validate(id: "User001") { id in
    let isValid = id != "User000"
    return isValid
}


// 짧게
let validationResult4 = validate(id: "User002") { $0 != "User000" }

0개의 댓글