안녕하세요 ~ swift 문법을 공부 중입니다.
지난번 시간에 이어서 스위프트 클로저 (swift closures) 알아보기 4탄 이어서 작성해보겠습니다.
혼자 보고 넘어다기보다는 이렇게 글을 남기며 정리하니 공부가 잘 되네요.
String 배열과 String 문자열을 인자로 받아
배열의 원소이 첫 문자가 인자로 받은 String 문자열과
같으면 true를 반환, 다르면 false를 실행하는
filterString 함수를 만들어보았습니다.
보통의 함수였습니다.
이번에는 클로저를 매개변수를 갖는 형태로 filterStringClosure 함수를 만들어보았어요.
(dataArray: [String], closure: (String) -> Bool)에서 알 수 있듯
String 배열과 String을 매개변수로 갖고 bool 값을 반환하는 클로저를 매개변수로 받고 있습니다.
여러 동영상이나 예제를 보면
보통 조건의 역할을 수행하는 부분을 클로저로 만드는 게 일반적인 것 같습니다.
closure: (String) -> Bool 여기서 true, false를 반환하게 되니
if closure(data) {
newArray.append(data)
}
형태인 closure(data) 부분에 true나 false가 들어가게 됩니다.
true면 newArray에 추가되고 false면 추가되지 않는 로직입니다.
filterStringClosure 함수를 실행할 때 클로저 로직을 채워서 실행하는 부분입니다.
실행결과를 result에 담아 print 해보니 잘 나오네요.
즉 이렇게 사용하면 실행할 때마다 원하는 로직을 작성한다는 번거로움도 있지만,
반면에 어떤 로직인지 함수를 사용할 때 한눈에 알아보기 쉬우며, 조건을 원하는 대로 쉽게 변경할 수 있습니다.
첫 문자가 a인 로직이 아닌, 배열의 원소가 5글자인 로직을 원한다면
if element.first?. description == "a" ----> if element.count == 5
이런 식으로 변경하여 이용할 수 있습니다.
클로저를 미리 변수에 담아 저장하고
filterStringClosure 함수를 실행할 때는 깔끔하게
filterStringClosure(dataArray: fruit, closure: findA) 이런 식으로 코드를 작성할 수 있습니다.
오늘 이렇게 언제 어떻게 사용하는지에 간단히 알아보았습니다.
댓글로 많은 피드백 기다리겠습니다.
감사합니다^^
마지막 클로저 알아보기 5탄도 기대해주세요.
'Swift 문법' 카테고리의 다른 글
swift guard let 사용하는 경우 (0) | 2020.11.17 |
---|---|
스위프트 클로저 (swift closures) 알아보기 5 (0) | 2020.09.10 |
swift filter, map, reduce 스위프트 필터,맵,리듀스 이용하기! (2) | 2020.09.10 |
스위프트 타입 캐스팅 as 업캐스팅(upcasting) as! as? 다운캐스팅(downcasting) (0) | 2020.09.10 |
스위프트 클로저 (swift closures) 알아보기 3 (0) | 2020.08.18 |