ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift - Closure Syntax Optimization
    swift 2021. 1. 5. 17:59

    Closure Syntax Optimization

    // 문자열 배열중에서 Pro가 포함된 것만 필터링
    var proModels = products.filter( { (name: String) -> Bool in
        return name.contains("Pro")
    })
    
    // Syntax Optimization
    // 규칙
    // 1. 프레임워크에 구현되어 있는 메소드라면 컴파일러는 프레임워크에 구현되어있는 메소드를 참고해서 추론할 수 있기 때문에
    //    파라미터 타입, 리턴형 생략가능
    products.filter( { (name) in
        return name.contains("Pro")
    })
    
    // 2. 파라미터의 이름은 숏텐더 아규먼트 네임으로 대체한다. -> 이 경우 파라미터 이름과 in 키워드는 생략 하고 숏텐더 아규먼트 네임으로 대체
    products.filter({
        return $0.contains("Pro")
    })
    
    // 3. 이제 클로저 표현식에서는 단일 return 문만 남아 있는데 이 경우 return 키워드 생략 -> 인플리쉬 리턴이라고 부른다.
    products.filter({
        $0.contains("Pro")
    })
    
    // 4. 클로저 파라미터가 마지막 파라미터라면 트레일링 클로저로 작성
    // 함수나 메소드 호출식 다음에 따라오는 표현식
    // 이렇게 하면 인라인 클로저가 트레일링 클로저로 바뀐것.
    products.filter() {
        $0.contains("Pro")
    }
    
    // () 안에 파라미터가 없으면 ()도 생략
    products.filte {
        $0.contains("Pro")
    }

     

    // 대소문자에 관계없이 오름차순 정렬을 직접 구현
    proModels.sort(by: { (lhs: String, rhs: String) -> Bool in
        return lhs.caseInsensitiveCompare(rhs) == .orderedAscending
    })
    
    // 1. 파라미터, 리턴형 생략
    proModels.sort(by: { (lhs, rhs) in
        return lhs.caseInsensitiveCompare(rhs) == .orderedAscending
    })
    
    // 2. 파라미터 이름, in 키워드를 생략하고 숏텐더 아규먼트로 대체
    proModels.sort(by: {
        return $0.caseInsensitiveCompare($1) == .orderedAscending
    })
    
    // 3. 단일 리턴문만 남았다면 return 생략
    proModels.sort(by: {
        $0.caseInsensitiveCompare($1) == .orderedAscending
    })
    
    // 4. 클로저가 마지막 파라미터라면 트레일링 클로저로 작성한다.
    // 그리고 지금처럼 argument label이 남아있다면 삭제
    proModels.sort(by: ) {
        $0.caseInsensitiveCompare($1) == .orderedAscending
    }
    
    
    proModels.sort() {
        $0.caseInsensitiveCompare($1) == .orderedAscending
    }
    
    // 5. 파라미터가 더 이상 없다면 () 생략
    proModels.sort {
        $0.caseInsensitiveCompare($1) == .orderedAscending
    }

    'swift' 카테고리의 다른 글

    swift - Escaping Closure  (0) 2021.01.05
    swift - Capturing Values  (0) 2021.01.05
    swift - Closure  (0) 2021.01.05
    swift - Nested Functions  (0) 2021.01.05
    swift - Function Types  (0) 2021.01.05

    댓글

Designed by Tistory.