ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 200917 - TIL
    TIL/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개의 정수 배열을 생성하는 코드를 활용하면 만들 수 있는 간단한 앱이다.

    다음에 배경의 투명도, 글씨의 크기 그리고 버튼을 누르면 초기화를 하는 부분을 추가해보자.

    1. 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
Designed by Tistory.