Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ios
- scrolling tab
- Side Menu
- 상단 탭바
- 기존 앱
- DataBinding
- notifychanged
- url 관찰
- List
- detect url
- url 추적
- swift #swift keychain #keychain 사용법
- DevelopmentRegion
- UIViewControllerTransitioningDelegate
- development language
- pod install
- SwiftUI
- GeometryReader
- oberve url
- swift
- 스크롤 탭
- 개발자 면접
- convert base64
- Android
- ViewBuilder
- Tuist
- base64 변환
- UIPresentationController
- Swift Package Manager
- transformation.map
Archives
- Today
- Total
버그 잡이
SwiftUI - onReceive vs onChange 본문
onReceive
- Publisher가 발행될때 이를 탐지할 수 있는 함수
예제 코드
struct ContentView: View {
@State private var message: String = ""
var body: some View {
VStack {
Text(message)
}
.onReceive(timer) { _ in
message = "Timer fired"
}
}
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
}
onChange
- 특정 값이 변경되었을때 이를 탐지할 수 있는 함수
- iOS 14부터 사용 가능
- Equatable을 준수하는 값이면 탐지 가능
- oldValue 캡처 가능
예제 코드
struct PlayerView: View {
var episode: Episode
@State private var playState: PlayState = .paused
var body: some View {
VStack {
Text(episode.title)
Text(episode.showTitle)
PlayButton(playState: $playState)
}
.onChange(of: playState) { [playState] newState in
model.playStateDidChange(from: playState, to: newState)
}
}
}
onReceive vs onChange
공통점
특정 값의 변경을 관찰하고 싶을때 사용
차이점
onReceive
- Publisher 형식의 값
- 같은 값으로 바꿔도 trigger
- oldValue 캡처 지원 X
- iOS 13 부터 사용 가능
onChange
- Equatable을 준수하고 있는 값
- 같은 값으로 바뀌면 trigger 안 됨
- oldValue 캡처 지원 O
- iOS 14 부터 사용 가능
* onChange deprecated
얼마 전까지 deprecated가 아니었던 것 같은데 이번에 iOS17이 나오면서 deprecated 된 것 같다.
action 클로저에서 파라미터를 받지 않거나 파라미터를 2개 받는 방식으로 쓸 것을 권장하고 있다.
변경된 함수는 iOS 17부터 사용 가능하다고 한다.
* 참고
https://developer.apple.com/documentation/swiftui/view/onchange(of:perform:)
반응형
'Swift' 카테고리의 다른 글
기존 레거시 프로젝트에 Tuist 적용해보기 (0) | 2023.06.05 |
---|---|
TCA란 무엇이고 어떻게 Composable 할 수 있는가? (0) | 2023.05.27 |
Swift - Linked List 구현 연습 #Reverse Linked List (0) | 2022.04.10 |
Swift - base64 <-> UIImage 변환 방법 (0) | 2021.11.30 |
WebView 내에서 url 이동을 관찰하는 방법 #Swift #WKWebview (0) | 2021.11.30 |
Comments