iOS 프로그래밍 기초

[iOS 프로그래밍 기초] 13주차

kimbh 2024. 12. 5. 15:18

다른 사람의 디자인, 앱을 가져올려면 

해당 view controller를 가져와[command + c] [command + v]를 해서 복사 붙여넣기 해야한다.

 

 

컨트롤러도 따로 지정해야하기 때문에 [new- file]에서 새로운 뷰 컨트롤러를 만들어야한다. ( 그전에 컨트롤러 중복되지않게 작성해야함)

 

다른 사람의 앱을 내 앱에 넣는 방법.

위에 과정을 거친 다음.

소스를 복사 붙여넣기 해서 클래스 명의 뷰 컨트롤러 앞에 생성한 클래스명을 작성하면 된다.

 

해당 부분에 내가 생성한 뷰 컨트롤러를 추가하면 해당 뷰 컨트롤러를 실행했을 때 사용이 되는 것을 알 수 있다.

 

매개변수도 없고, 리턴값도 없는 것을 3번째 매개변수에 completion을 선언했다. 이것을 "디폴트 인자"라고함.  (시험에 나옴)

 

사진들을 보면 iOS 함수중에서 후행 클로저를 많이 사용하는 순위를 매겨서 나온 결과이다.

 

클로저에 대한 내용을 다루겠다.

x: 10, y: 20을 추가할 경우 오류가 나오는 것을 알 수 있다.

해석하면 아규먼트 레이블 즉 x:, y:가 필요 없다는 것을 알 수 있다. 

바꾸게 된다면

 

let add1 = {(x: Int, y: Int) -> Int in
return(x+y)
}

print(add1(10, 20))

위에 30은 다른 함수를 호출해서 나온 30이고 아래가 후행 클로저를 사용해서 30이 나온 값이다.

이렇게 하면 오류가 생기지 않고 30으로 출력이 되는것을 알 수 있다.

 

[출처 - Smile Han youtube closer]

후행 클로저는 아규멘트를 마지막에 쓸 때 함수 밖에다가 사용할 수 있다.

즉, 아규먼트 레이블을 생략할 수 있다.(후행 클로저, trailing closure라고 부름)

 

func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}

해당 코드를 보면 매스 함수에서는 매개변수가 세 개로 존재하지만 cal 부분은 후행 클로저로 (Int, Int) 두 개의 매개변수와 ->는 리턴해주는 타입을 의미한다.

하지만 이 math함수에서는 math로 리턴해주는게 아니기 때문에 math함수에서 리턴해주는 데이터 타입은 마지막 화살표가 있는 Int가 데이터타입 리턴이다.

 

func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}

print(math(x: 10, y: 20, cal: {
    (x: Int, y: Int) -> Int in
    return(x+y)
}))

print(math(x: 10, y: 20){
    (x: Int, y: Int) -> Int in
    return(x+y)
    
})

 

이소스들이 후행 클로저를 의미하는 소스이다. 

첫번째 코드는 이해하기 편하게 되어있는 소스이고,

두번째 코드는 바로 함수처리하는 소스이고,

세번째 코드는 두번째 코드의 지저분한 내용을 축약한 소스이다.