[Swift] Clousure(클로저) 사용법 & 예제

728x90

Clousure(클로저) 사용법 & 예제


Clousure(클로저)란?

  • 비교적 짧고 독립적인 코드 조각, 자바에서는 ‘람다’라고도 불림
  • 함수와 클로저는 서로 완전히 호환된다.
  • 3가지 종류의 클로저가 있다.

    { (parameters) -> ReturnType in
        statements
    }

    { statements }

사용 예제

클로저 표현식

let c = { print("Hello, Swift") } // 파라미터가 없고 리턴형 없는 Closure
c()

//in으로 Closure Head , Body 구분
let c2 = { (str: String) -> String in
    return "Hello, \(str)"
}

let result = c2("Closure") //Closure에서는 Argument label 사용 하지 않는다
print(result)

클로저 호출

//클로저 호출
typealias SimpleStringClosure = (String) -> String

let c2 = { (str: String) -> String in
    return "Hello, \(str)"
}

//inLine 클로져 바디에서 작성한 코드가 짧을 때 사용합니다.
func perform(closure: SimpleStringClosure) {
    print(closure("IOS"))
}
perform(closure: c2)

perform(closure: { (str: String) -> String in
    return "Hi, \(str)"
}) 

클로저를 사용하는 예제 1

let product = [
    "MacBook Air", "MacBook Pro",
    "iMac", "iMac Pro", "Mac Pro", "Mac mini",
    "iPad Pro", "iPad", "iPad mini",
    "iPhone Xs", "iPhone Xr", "iPhone 8", "iPhone 7",
    "AirPods",
    "Apple Watch Series 4", "Apple Watch Nike+"
]

var proModels = product.filter({ (name: String) -> Bool
    in
    return name.contains("Pro")
})

print(proModels)

print(proModels.sorted()) //아스키 코드 순

//구현된 메소드의 형식 파악하고 직접 비교식 구현 , String 두개 받아서 Bool 리턴
proModels.sort(by: { (lhs: String, rhs: String) ->
    Bool in
    return lhs.caseInsensitiveCompare(rhs)
    == .orderedAscending
})

print(proModels)

클로저를 사용하는 예제 2

print("Start")
print("End")

//코드를 지연시키는 메소드
DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: {
    print("End")
    })

//return 눌러서 자동완성 도움 받으면 같으면서 최대한 단순한 코드로 바뀜
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
    print("End")
}

 

결과 화면


출처 : 어서와! Swift는 처음이지?(Programmers)
728x90

댓글

Designed by JB FACTORY