"Level-up-swift" 강의를 참고해서 재구성했습니다. (in Udemy)
let closureExample = {
let player = 10
let computer = 5
if player > computer {
print("플레이어가 승리했습니다")
} else {
print("AI가 승리했습니다")
}
}
closureExample
이라는 상수에 클로저를 할당하고 있죠. 그리고 if 분기절에 따라서 다른 print문을 출력하고 있습니다.
이처럼 클로저는 할당할 수 있습니다.
호출 할때는 다음과 같이 호출하죠.
closureExample()
메소드를 하나 만들어 보고 그 메소드를 파라미터로 전달받아 보겠습니다.
func printSomething(text: String) { print(text) }
func printIt(closure: (String) -> Void) {
let message = "안녕 친구"
closure(message)
}
printIt(closure: printSomething)
클로저는 변수에 적용할 수도 있습니다.
var hello: () -> (String) = {
return "Hello!"
}
hello()
var hello2 = {
return "Hello!"
}
hello2()
파라미터로 값을 전달받아서 연산한 값을 리턴할 수 있습니다.
var double: (Int) -> (Int) = { x in
return 2 * x
}
구체적인 예시를 들자면, 디자이너분께 받은 스토리보드에 특정 기기에 맞춰서 이미지를 받는다고 가정해볼게요.
iOS 개발자는 하나의 스토리보드를 보고 모든 기기에 대응시켜야 합니다. 물론 비례식을 사용해서 매번 계산해서 할당해줄 수 있겠죠.
이번에 클로져를 배웠으니 이를 활용해보는 것도 좋아보입니다.
var convertedRatio: (Float) -> Float = { Float($0 / 812) }
convertedRatio(134)
추가로 클로저를 이용한 축약문법 예시를 보겠습니다.
let names = ["우노", "모야", "김우노", "최모야", "박모야", "이우노", "정모야"]
func backward(_ s1: String, s2: String) -> Bool {
return s1 > s2
}
backward(names[3], s2: names[2])
let reversedNames01 = names.sorted(by: backward)
reversedNames01
let reversedNames02 = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
reversedNames02
let reversedNames03 = names.sorted(by: {s1, s2 in return s1 > s2 })
reversedNames03
let reversedNames04 = names.sorted(by: {s1, s2 in s1 > s2})
reversedNames04
let reversedNames05 = names.sorted(by: { $0 > $1 })
reversedNames05
let reversedNames06 = names.sorted() { $0 > $1 }
reversedNames06
let reversedNames07 = names.sorted(by: >)
reversedNames07
글자수가 짧은 순으로 정렬하시오.
// Q. 글자가 짧은 것들을 순으로 문자열 배열을 정렬하시오
let strArr = ["Alex", "Harry", "Uno", "Kay", "zico"]
func shortFirst(_ s1: String, _ s2: String) -> Bool {
return s1.count < s2.count
}
let shortStrArr01 = strArr.sorted(by: shortFirst)
let shortStrArr02 = strArr.sorted() { $0.count < $1.count}