본문 바로가기
프로그래밍/Swift

UITabBar 숨김처리 와 Swift 클로저

by Mr-후 2018. 3. 5.
반응형

책을 보고 실습을 하다 보니 유용하거나 다시 확인을 해 봐야하는 부분, 실무에서 실제 필요한 부분들은 메모를 하는 차원에서 포스팅으로 기록을 한다. 

일부 주요 내용만 정리를 하는 것이다. 추후 다시 바로 찾아 볼 수 있도록. 


Objective-C로 할 땐 꽤 어려웠던 것 같은데 이게 원래 이리 쉬운 작업이었나? 싶다. 


    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

        //

        let tabBar = self.tabBarController?.tabBar;

        //tabBar?.isHidden = (tabBar?.isHidden == true) ? false : true;

        

        UIView.animate(withDuration: TimeInterval(0.3)) {

            //

            tabBar?.alpha = (tabBar?.alpha == 0 ? 1 : 0);

        }

    }


해당 구문은, ViewController의 터치엔드 이벤트에서 탭바를 찾아 숨김처리를 하는 예제이다. 

UIView.animate를 사용, 보이고 숨기고를 알파값을 주어 애미메이션되도록 처리한 것이다. 


animate뒤에 붙은 {} 구문이 Swift의 클로저 구문이라고 생각하면 되겠다. 


꼼꼼한 재은씨의 스위프트 실무편에 소개된 내용인데, 크로저에 대한 정의가 있어 옮겨 볼까 한다. 


클로저. 

클로저(Closure)는 스위프트의 함수 정의 구문에서 목적에 따라 불필요한 부분을 제거하고 최대한 단순한 형태로 일회용 함수 역할을 할 수 있도록 만들어진 객체이다. 주로 인자값으로 함수가 필요한 경우, 일일이 함수를 정의하기보다는 임시로 만들어 한 번만 사용할 목적으로 정의된다. 


다음과 같이 정의된 함수가 있다고 가정, 클로저 문법에 따라 각각의 과정을 거쳐 함수를 단순화할 수 있다. 


func add(value1: Int, value2: Int) -> Int {

let result = value1 + value2; 

return result; 

}


1) 이미 함수라는 것을 알고 있으므로 함수를 뜻하는 func 키워드 생략 가능 


add(value1: Int, value2: Int) -> Int {

let result = value1 + value2; 

return result; 

}


2) 일회용 함수이므로 재사용을 위한 함수명을 생략 


(value1: Int, value2: Int) -> Int {

let result = value1 + value2; 

return result; 

}


3) 매개변수 타입을 통해 함수 형식이 이미 정의되어 있다면 매개변수 타입과 반환 타입을 생략할 수 있다. 


(value1, value2) -> Int {

let result = value1 + value2; 

return result; 

}


4) 입력받는 인자값의 순서가 함수 타입에 정의되어 있으므로, 매개변수 자체를 생략하고 대신 매개변수를 $0, $1로 사용할 수 있다. 


{

let result = $0 + $1 

return result;

}


5) 어차파 마지막 결과값만 반환하면 되므로 return 구문 생략 가능 


{

$0 + $1 


엄청나게 간단하다. @@ 


클로저는 재사용성이나 가독성보다는 어떻게 하면 간결하게 작성할 수 있을까를 염두에 두는 객체. 

반응형

'프로그래밍 > Swift' 카테고리의 다른 글

navigationController navigationBar숨기기  (0) 2018.03.06
?? Nil 병합 연산자  (0) 2018.03.06
Swift stretchableImage  (0) 2018.03.05
UIColor to Hex func  (0) 2018.03.05
Swift 사용가능한 폰트 패밀리 출력.  (0) 2018.03.05