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

14. Swift의 다양한 함수들

by Mr-후 2019. 2. 21.
반응형

Swift의 다양한 함수들


Swift의 중첩함수.


스위프트에서는 데이터 타입의 중첩이 자유롭다. 

열거형 안에 또 하나의 열거형이 들어갈 수 있고 클래스 안에 또 다른 클래스가 들어 갈 수 있다. 함수의 중첩은 함수 안에 함수를 넣을 수 있다. 일반적인 함수는 모두 전역함수로 모듈 어디서든 사용할 수 있는 함수이다. 


함수 안에 함수로 구현된 중첩 함수는 상위 함수의 몸통 블록 내부에서만 함수를 사용할 수 있다. 중첩 함수라고 해서 외부에서 사용할 수 없는 것은 아니다. 함수가 하나의 반환 값으로 사용될 수있으므로(일급 객체라 가능) 중첩 함수를 담은 함수가 중첩 함수를 반환하면 밖에서도 사용할 수 있다. 


함수의 아그먼트와 리턴타입을 typealias로 정의를 하고 함수를 할당해주는 방식으로 자바스크립트의 콜백리스너로 콜백함수를 넘겨주는 방식과 비슷하다. 

typealias MoveFunc = (Int) -> Int 


func functionForMove(_ shouldGoLeft: Bool) -> MoveFunc {

func goRight(_ currentPosition: Int) -> Int {

return currentPosition + 1

}

func goLeft(_ currentPosition: Int) -> Int {

return currentPosition -1

}

return shouldGoLeft ? goLeft : goRight

}


var position: Int = -4

let moveToZero: MoveFunc = functionForMove(position > 0)


while position != 0 {

print("\(position)....")

position = moveToZero(position)

}


* 중요한 부분은 함수를 리턴한다는 것이 중요함. 


종료되지 않는 함수(비반환 함수) 

종료되지 않는다는 의미는 정상적으로 끝나지 않는 함수라는 뜻인데 비반환 함수 또는 비반환 메서드.

오류를 던지거나 중대한 시스템 오류를 보고 하는 등의 일을 하고 프로세스를 종료해 보기리 때문에 붙혀진 이름이다. 어디에서든 호출이 가능하고 guard구문의 else블록에서도 호출할 수 있다. 재정의 할 수 있지만 비반환 타입이라는 것은 변경할 수 없다. 

비반환 함수(메서드)는 반환 타입을 Never라고 명시해주면 된다. 

func crashAndBurn() -> Never {

//something .... 

}


반환값을 무시할 수 있는 함수를 선언할 때는 @discardableResult 선언 속성을 사용한다. 

@discardableRessult func test(_ something: String) -> String {

//

return something

}

필요할 때만 반환값을 취해서 사용하고 싶을 때 컴파일러의 경고를 싫을 때 사용할 수 있다. 



반응형

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

16. 구조체와 클래스  (0) 2019.02.23
15. 옵셔널(Optional)  (0) 2019.02.22
13. Swift함수의 반환 타입  (0) 2019.02.20
12. Swift 함수의 매개변수 이름과 전달인자 레이블  (0) 2019.02.19
11. Switch문의 골격  (0) 2019.02.18