-
200917 - TILTIL/2021 2020. 9. 18. 00:47
Swift 문법
오늘은 Closure에 대해서 공부했다.
- Named Closure
- Unnamed Closure
- Closure을 호출하는 방법
- Inline Closure
- Trailing Closure
- Syntax Optimization
- $n : Shorthand Argument Name
다른 언어에선 볼 수 없었던 개념인 Closure에 대해서 배웠다.어떤 기능을 하는 코드 블록을 Closure라고 하고 함수는 Named Closure이다.200919추가: 다른 언어에서도 사용한다. 람다라고 불리기도 한다. 1
Function Type을 잘 이해하고 공부해서 어렵지 않게 이해할 수 있었다.
let okAction = UIAlertAction(title: "확인", style: .default) { _ in print("확인을 눌렀어!!")
Syntax Optimization을 하면 반드시 생략한 파라미터를 다 써야한다. 다 쓰지 않는다면 _ in으로 파라미터를 쓰지 않겠다고 명시를 해야 하는 점을 기억하자.
func myFilter(list: [Int], predicate: (Int) -> Bool) -> [Int] { var result = [Int]() for num in list { if predicate(num) { result.append(num) } } return result } myFilter(list: list, predicate: { (num: Int) -> Bool in return num.isMultiple(of: 2) }) //문법 최적화 myFilter(list: list) { $0.isMultiple(of: 2) }
다음 코드를 문법최적화하는데 애를 먹었다. predicate만 클로저이고 앞에 list는 최적화 하지 못하는 것을 기억하자.
//중복이 안되는 숫자 6개를 가지는 배열을 만든다. //빈 문자열 생성 var list: [Int] = [] //for문은 반복횟수를 동적으로 지정할 수 없다. //for num in 0...5 { // //} //list의 갯수가 6개가 될 동안 반복 while list.count < 7 { let randomNum = Int.random(in: 1 ... 45) //list가 랜덤생성정수를 포함하지 않는다면 배열에 추가한다. if !list.contains(randomNum) { list.append(randomNum) } } list.sorted()
for문은 반복횟수를 동적으로 지정할 수 없다는 점을 기억하자.
위 코드를 활용하면 로또 번호를 생성해주는 앱을 만들 수 있다.
iOS
UIAlertAction(title: String?, style: UIAlertAction.Style, handler: ((UIAlertAction) -> Void)?)
여기서 handler는 클로저이다. 경고창에서 확인을 누르면 실행이 된다.
확인을 누르면 초기화를 시킨다. 같은 상황에 응용할 수 있다.
present(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?
여기서도 completion이 클로저이다. 경고창이 뜬 직후에 실행된다.
아직 모르는 개념이 많지만 위에 있는 중복이 안 되는 6개의 정수 배열을 생성하는 코드를 활용하면 만들 수 있는 간단한 앱이다.
다음에 배경의 투명도, 글씨의 크기 그리고 버튼을 누르면 초기화를 하는 부분을 추가해보자.
- 200919추가 [본문으로]
728x90'TIL > 2021' 카테고리의 다른 글
201919 - TIL (0) 2020.09.20 200918 - TIL (1) 2020.09.19 200916 - TIL (1) 2020.09.17 200914 - TIL (0) 2020.09.15 200910 - TIL (0) 2020.09.15