본문 바로가기
공부/iOS

iOS 프로그래밍 13주차

by Electrohyun 2025. 11. 25.

BMI판정 앱(4)

 


 

저번에 WebKit 프레임워크 없었던 문제를 해결해보자.

 

+ 버튼 누르기

 

 

웹킷 프레임워크 추가하기

(도움 주신 한성현 교수님께 감사합니다.)

URL 구조체 (출처: Smile Han의 iOS 프로그래밍)

 

URL 구조체는 이곳 저곳에서 굉장히 많이 사용된다.

(참고: https://developer.apple.com/documentation/foundation/url)

 

외부 앱 여는 부분은 기말 프로젝트 때 활용해봐도 재밌을 것 같다.

 

URL 구조체 이니셜라이저, Failable?
두번째 항목을 보면 첫번째 인자만 색이 짙고, 나머지는 희미하다. 왜?

-> 

디폴트 값이 있기 때문이다.

 

URL형이 아니고, 왜 Optional URL형인가?

-> Failable Initializer를 거쳤기 때문이다.

 

guard let으로 안전하게 수정하기

 

viewDidLoad()는 화면의 뷰가 메모리에 처음 로드된 직후 실행

 

 

 


회전 시 레이아웃 깨지는 문제 해결하기

 


동영상 플레이어 리팩토링하기(후행 클로저)

위 소스를 아래 소스로 대체하기(player.play() 이동)

present(playerViewController, animated: true)
player.play()
// 화면 표시 요청 직후 재생 시작됨
// 애니메이션 끝나기 전에 play가 실행될 수 있음

self.present(playerViewController, animated: true)
player.play()
// 위와 동일한 동작 (self만 추가됨)
// 애니메이션 완료 전 재생될 가능성 있음

self.present(playerViewController, animated: true) {
    player.play()
}
// 화면 표시 애니메이션이 모두 끝난 후 재생 시작
// 가장 자연스럽고 권장되는 방식!!

 


 

클로저

 

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

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

 

클로저를 사용할 경우 argument lable을 작성하지 않아도 된다.

 

후행 클로저(출처: Smile Han의 iOS 프로그래밍)

 

// 클로저의 다양한 형태

result = math(x: 10, y: 20, cal: add)
print(result)

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

result = math(x: 10, y: 20, cal: {(a: Int, b: Int) in
    return a+b
})
print(result)

result = math(x: 10, y: 20, cal: {
    return $0 + $1
})
print(result)

result = math(x: 10, y: 20, cal: {$0 + $1})
print(result)

 

$0, $1같은 문법은 Shorthand 인자.

 

후행 클로저를 쓰는 이유

 

1. 가독성 좋아짐.2. 중첩 클로저 있을 때 구조 깔끔해짐.3. SwiftUI와 클로저 기반 API에서 필수적임.4. 함수 호출을 "동작"처럼 읽을 수 있다.

'공부 > iOS' 카테고리의 다른 글

iOS 프로그래밍 12주차  (0) 2025.11.19
iOS 프로그래밍 11주차  (0) 2025.11.11
iOS 프로그래밍 10주차  (0) 2025.11.04
iOS 프로그래밍 9주차  (0) 2025.10.28
iOS 프로그래밍 7주차  (0) 2025.10.14