WWDC 2019-เดฒเต เดธเตเดฑเตเดฑเตเดฑเตเดฑเต เดเดซเต เดฏเตเดฃเดฟเดฏเตป เดธเตเดทเดจเดฟเตฝ เดชเดเตเดเตเดเตเดคเตเดคเดคเดฟเดจเต เดถเตเดทเด, SwiftUI-เดฏเดฟเดฒเตเดเตเดเต เดเดดเตเดจเตเดจเดฟเดฑเดเตเดเดพเตป เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต. เดเดพเตป เด
เดคเดฟเดจเตเดชเตเดชเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดงเดพเดฐเดพเดณเด เดธเดฎเดฏเด เดเดฟเดฒเดตเดดเดฟเดเตเดเต, เดเตเดเดพเดคเต เดตเดฟเดถเดพเดฒเดฎเดพเดฏ เดถเตเดฐเตเดฃเดฟเดฏเดฟเดฒเตเดณเตเดณ เดเดชเดฏเตเดเตเดคเดพเดเตเดเตพเดเตเดเต เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดเตเดจเตเดจ เดเดฐเต เดฏเดฅเดพเตผเดคเตเดฅ เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดคเตเดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
เดเดพเตป เดเดคเดฟเดจเต MovieSwiftUI เดเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเต - เดเดคเต เดชเตเดคเดฟเดฏเดคเตเด เดชเดดเดฏเดคเตเดฎเดพเดฏ เดธเดฟเดจเดฟเดฎเดเตพเดเตเดเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเตเด เด
เดต เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฐเต เดถเตเดเดฐเดคเตเดคเดฟเตฝ เดถเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดเดฐเต เด
เดชเตเดฒเดฟเดเตเดเตเดทเดจเดพเดฃเต.
เดเดเตเดเตพ เดเตผเดฎเตเดฎเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต: "Habr"-เดจเตเดฑเต เดเดฒเตเดฒเดพ เดตเดพเดฏเดจเดเตเดเดพเตผเดเตเดเตเด - "Habr" เดชเตเดฐเตเดฎเตเดทเดฃเตฝ เดเตเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเตเดเตเดเดฟเดฒเตเด เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดเตเดดเตเดธเดฟเตฝ เดเตเดฐเตเดฎเตเดชเตเตพ 10 เดฑเตเดฌเดฟเตพเดธเต เดเดฟเดดเดฟเดตเต.
เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเต: เดตเดฟเดฆเตเดฏเดพเดญเตเดฏเดพเดธ เดเตบเดฒเตเตป เดเตเดดเตเดธเต
"เดชเตเดฐเตเดซเดทเตป เดเดพเดต เดกเตเดตเดฒเดชเตเดชเตผ" .
เด
เดชเตเดชเตเตพ MovieSwiftUI-เดฏเตเดเตเดเต เดเดจเตเดคเตเดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด?
- API-เดฏเตเดฎเดพเดฏเดฟ เดธเดเดตเดฆเดฟเดเตเดเตเดจเตเดจเต - เดฎเดฟเดเตเดเดตเดพเดฑเตเด เดเดฒเตเดฒเดพ เดเดงเตเดจเดฟเด เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเดณเตเด เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเต.
- เด
เดญเตเดฏเตผเดคเตเดฅเดจเดเดณเดฟเดฒเต เด
เดธเดฟเตปเดเตเดฐเดฃเดธเต เดกเดพเดฑเตเดฑ เดฒเตเดกเตเดเตเดฏเตเดฏเตเดเดฏเตเด JSON เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดธเตเดตเดฟเดซเตเดฑเตเดฑเต เดฎเตเดกเดฒเดฟเดฒเตเดเตเดเต เดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต
เดเตเดกเดฌเดฟเตพ . - เด เดญเตเดฏเตผเดคเตเดฅเดจ เดชเตเดฐเดเดพเดฐเด เดฒเตเดกเต เดเตเดฏเตเดค เดเดฟเดคเตเดฐเดเตเดเตพ เดเดพเดฃเดฟเดเตเดเตเดเดฏเตเด เด เดต เดเดพเดทเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
- iOS, iPadOS, macOS เดเดจเตเดจเดฟเดตเดฏเตโเดเตเดเดพเดฏเตเดณเตเดณ เด เดเดชเตเดชเต เด OS-เดเดณเตเดเต เดเดชเดฏเตเดเตเดคเดพเดเตเดเตพเดเตเดเต เดฎเดฟเดเดเตเด UX เดจเตฝเดเตเดจเตเดจเต.
- เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเต เดกเดพเดฑเตเดฑ เดธเตเดทเตเดเดฟเดเตเดเดพเดจเตเด เด เดตเดฐเตเดเต เดธเตเดตเดจเตเดคเด เดฎเตเดตเดฟ เดฒเดฟเดธเตเดฑเตเดฑเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเดพเดจเตเด เดเดดเดฟเดฏเตเด. เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดเดชเดฏเตเดเตเดคเต เดกเดพเดฑเตเดฑ เดธเดเดฐเดเตเดทเดฟเดเตเดเตเดเดฏเตเด เดชเตเดจเดเดธเตเดฅเดพเดชเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
- Redux เดชเดพเดฑเตเดฑเตเตบ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดพเดดเตเดเดเดณเตเด เดเดเดเดเตเดเดณเตเด เดฎเตเดกเดฒเตเดเดณเตเด เดตเตเดฏเดเตเดคเดฎเดพเดฏเดฟ เดตเตเตผเดคเดฟเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดตเดฟเดเตเดฏเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพ เดชเตเดฐเดตเดพเดนเด เดเดเดฆเดฟเดถเดฏเดฟเดฒเดพเดฃเต. เดเดคเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เดเดพเดทเต เดเตเดฏเตเดฏเดพเดจเตเด เดชเตเดจเดเดธเตเดฅเดพเดชเดฟเดเตเดเดพเดจเตเด เดคเดฟเดฐเตเดคเตเดคเดฟเดฏเตเดดเตเดคเดพเดจเตเด เดเดดเดฟเดฏเตเด.
- เดเดชเตเดฒเดฟเดเตเดเตเดทเตป SwiftUI, TabbedView, SegmentedControl, NavigationView, Form, Modal เดฎเตเดคเดฒเดพเดฏเดตเดฏเตเดเต เด เดเดฟเดธเตเดฅเดพเดจ เดเดเดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต. เดเดคเต เดเดทเตโเดเดพเดจเตเดธเตเดค เดเดพเดดเตเดเดเตพ, เดเดเดเตเดฏเดเตเดเตพ, UI/UX เดเดจเตเดจเดฟเดตเดฏเตเด เดจเตฝเดเตเดจเตเดจเต.
เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดเดจเดฟเดฎเตเดทเตป เดธเตเดเดฎเดฎเดพเดฃเต, GIF เด
เตฝเดชเตเดชเด เดเตเดเตเดเดฟเดชเตเดชเตเดฏเดฟ
เดเดชเตเดชเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเต เดเดจเดฟเดเตเดเต เดตเดณเดฐเตเดฏเดงเดฟเดเด เด เดจเตเดญเดตเด เดจเตฝเดเดฟ, เดฎเตเดคเตเดคเดคเตเดคเดฟเตฝ เดเดคเต เดเดฐเต เดจเดฒเตเดฒ เด เดจเตเดญเดตเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดเดจเดฟเดเตเดเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดทเดฎเดฎเดพเดฏ เดเดฐเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดเดดเตเดคเดพเตป เดเดดเดฟเดเตเดเต, เดธเตเดชเตเดฑเตเดฑเดเดฌเดฑเดฟเตฝ เดเดพเตป เด เดคเต เดฎเตเดเตเดเดชเตเดชเตเดเตเดคเตเดคเตเดเดฏเตเด iOS 13 เดจเตเดฑเต เดฑเดฟเดฒเตเดธเดฟเดจเตเดชเตเดชเด เดเดชเตเดชเตเดธเตเดฑเตเดฑเตเดฑเดฟเตฝ เดชเตเดฐเดธเดฟเดฆเตเดงเตเดเดฐเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด.
Redux, BindableObject, EnvironmentObject
เดเดพเตป เดเดชเตเดชเตเตพ เดเดเดฆเตเดถเด เดฐเดฃเตเดเต เดตเตผเดทเดฎเดพเดฏเดฟ Redux-เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต, เด
เดคเดฟเดจเดพเตฝ เดเดจเดฟเดเตเดเต เด
เดคเดฟเตฝ เดจเดฒเตเดฒ เดชเดฐเดฟเดเดฏเดฎเตเดฃเตเดเต. เดชเตเดฐเดคเตเดฏเตเดเดฟเดเตเดเตเด, เดเดพเตป เดเดคเต เดฎเตเตปเดตเดถเดคเตเดคเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต
เดเดฐเต SwiftUI เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพ เดซเตเดฒเต เดเตผเดเตเดเดฟเดเตเดเตเดเดฑเดพเดฏเดฟ Redux เดคเดฟเดฐเดเตเดเตเดเตเดคเตเดคเดคเดฟเตฝ เดเดพเตป เดเดฐเดฟเดเตเดเดฒเตเด เดเตเดฆเดฟเดเตเดเดฟเดเตเดเดฟเดฒเตเดฒ. UIKit เดเดชเตเดชเดฟเตฝ Redux เดเดชเดฏเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเดฑเตเดฑเดตเตเด เดตเตเดฒเตเดฒเตเดตเดฟเดณเดฟ เดจเดฟเดฑเดเตเด เดญเดพเดเดเตเดเตพ เดธเตเดฑเตเดฑเตเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดเดฏเตเด เดกเดพเดฑเตเดฑ เดจเตเดเตเดเดฏเตเด เดตเตเดฃเตเดเตเดเตเดเตเดเตเดเดฏเตเด เดจเดฟเดเตเดเดณเตเดเต เดเดพเดดเตเดเดเตพ/เดเดเดเดเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเดฟเดฒเตเดเตเดเต เดฎเดพเดชเตเดชเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดเดจเดฟเดเตเดเต เดเดฃเดเตเดเดฑเตเดเดณเตเดเต เดเดฐเต เดคเดฐเด เดฒเตเดฌเตเดฐเดฑเดฟ เดธเตเดทเตเดเดฟเดเตเดเตเดฃเตเดเดฟ เดตเดจเตเดจเต (ReSwift, ReKotlin เดเดจเตเดจเดฟเดต เดเดชเดฏเตเดเดฟเดเตเดเต). เดจเดจเตเดจเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต, เดชเดเตเดทเต เดงเดพเดฐเดพเดณเด เดเตเดกเต. เดจเดฟเตผเดญเดพเดเตเดฏเดตเดถเดพเตฝ, เดเดคเต (เดเดคเตเดตเดฐเต) เดเดชเตเดชเตบ เดธเตเดดเตเดธเต เด เดฒเตเดฒ.
เดจเดฒเตเดฒ เดตเดพเดฐเตเดคเตเดค! SwiftUI-เตฝ เดตเดฟเดทเดฎเดฟเดเตเดเตเดฃเตเด เดเดฐเตเดฏเตเดฐเต เดเดพเดฐเตเดฏเด - เดจเดฟเดเตเดเตพ Redux เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเตเดตเตเดเตเดเดฟเตฝ - เดธเตเดฑเตเดฑเตเดฑเตเดเตพ, เดธเตเดฑเตเดฑเตเดฑเตเดฑเตเดเตพ, เดฑเดฟเดกเตเดฏเตเดธเดฑเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเตเดเตเดเตเดฑเดฟเดเตเดเดพเดฃเต. @EnvironmentObject-เดจเต เดจเดจเตเดฆเดฟ, เดธเตเดฑเตเดฑเตเดฑเตเดฎเดพเดฏเตเดณเตเดณ เดเดเดชเตเดเตฝ SwiftUI เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เดชเดฐเดฟเดชเดพเดฒเดฟเดเตเดเตเดจเตเดจเต. เด เดคเดฟเดจเดพเตฝ, เดธเตเดฑเตเดฑเตเตผ เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฐเต BindableObject เดเดชเดฏเตเดเดฟเดเตเดเดพเดฃเต.
เดเดพเตป เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดธเตเดตเดฟเดซเตเดฑเตเดฑเต เดชเดพเดเตเดเตเดเต เดธเตเดทเตเดเดฟเดเตเดเต,
เดเดคเต เดเดเตเดเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต?
final public class Store<State: FluxState>: BindableObject {
public let willChange = PassthroughSubject<Void, Never>()
private(set) public var state: State
private func _dispatch(action: Action) {
willChange.send()
state = reducer(state, action)
}
}
เดจเดฟเดเตเดเตพ เดเดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดเดฐเดเดญเดฟเดเตเดเตเดฎเตเดชเตเดดเตเดฒเตเดฒเดพเด, เดจเดฟเดเตเดเตพ เดเดฟเดฏเตผเดฌเตเดเตเดธเต เดธเดเตเดตเดฎเดพเดเตเดเตเดจเตเดจเต. เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดฑเต เดจเดฟเดฒเดตเดฟเดฒเต เด เดตเดธเตเดฅ เด เดจเตเดธเดฐเดฟเดเตเดเต เดเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ เดตเดฟเดฒเดฏเดฟเดฐเตเดคเตเดคเตเด. เด เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจ เดคเดฐเดคเตเดคเดฟเดจเตเด เดกเดพเดฑเตเดฑเดฏเตเดเตเดเตเด เด เดจเตเดธเตเดคเดฎเดพเดฏเดฟ เดเดฐเต เดชเตเดคเดฟเดฏ เดชเดฐเดฟเดทเตเดเดฐเดฟเดเตเด เด เดตเดธเตเดฅ เดคเดฟเดฐเดฟเดเต เดจเตฝเดเตเด.
เดถเดฐเดฟ, เดธเตเดฑเตเดฑเตเตผ เดเดฐเต BindableObject เดเดฏเดคเดฟเดจเดพเตฝ, PassthroughSubject เดจเตฝเดเตเดจเตเดจ willChange เดชเตเดฐเตเดชเตเดชเตผเดเตเดเดฟ เดเดชเดฏเตเดเดฟเดเตเดเต เด เดคเดฟเดจเตเดฑเต เดฎเตเดฒเตเดฏเด เดฎเดพเดฑเตเดฎเตเดชเตเตพ เด เดคเต SwiftUI-เดฏเต เด เดฑเดฟเดฏเดฟเดเตเดเตเด. เดเดพเดฐเดฃเด, BindableObject เดเดฐเต PublisherType เดจเตฝเดเดฃเด, เดเดจเตเดจเดพเตฝ เด เดคเต เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเด เดชเตเดฐเตเดเตเดเตเดเตเดเตเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดฒเดพเดฃเต. เดฎเตเดคเตเดคเดคเตเดคเดฟเตฝ, เดเดคเต เดเดชเตเดชเดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเดณเดฐเต เดถเดเตเดคเดฎเดพเดฏ เดเดชเดเดฐเดฃเดฎเดพเดฃเต. เด เดคเดจเตเดธเดฐเดฟเดเตเดเต, เด เดเตเดคเตเดค เดฑเตเตปเดกเดฑเดฟเดเดเต เดธเตเดเตเดเดฟเดณเดฟเตฝ, เดธเดเดธเตเดฅเดพเดจ เดฎเดพเดฑเตเดฑเดคเตเดคเดฟเดจเดจเตเดธเดฐเดฟเดเตเดเต เดเดพเดดเตเดเดเดณเตเดเต เดฌเตเดกเดฟ เดฑเตเตปเดกเตผ เดเตเดฏเตเดฏเดพเตป SwiftUI เดธเดนเดพเดฏเดฟเดเตเดเตเด.
เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ, เดเดคเต เดธเตเดตเดฟเดซเตเดฑเตเดฑเตเดฏเตเดเดฏเตเดเต เดเดฒเตเดฒเดพ เดนเตเดฆเดฏเดตเตเด เดฎเดพเดจเตเดคเตเดฐเดฟเดเดตเตเดฎเดพเดฃเต. เดเดชเตเดชเตเตพ, เดเดฐเต เดธเดเดธเตเดฅเดพเดจเด เดธเดฌเตโเดธเตโเดเตเดฐเตเดฌเตเดเตเดฏเตเดฏเตเดจเตเดจ เดเดคเต เดตเตเดเตเดทเดฃเดคเตเดคเดฟเดฒเตเด, เดธเดเดธเตเดฅเดพเดจเดคเตเดคเต เดจเดฟเดจเตเดจเต เดเดจเตเดคเต เดกเดพเดฑเตเดฑเดฏเดพเดฃเต เดฒเดญเดฟเดเตเดเตเดจเตเดจเดคเต, เดเดจเตเดคเดพเดฃเต เดฎเดพเดฑเดฟเดฏเดคเต เดเดจเตเดจเดคเดฟเดจเต เด เดจเตเดธเดฐเดฟเดเตเดเต เดเดพเดดเตเด เดฑเตเตปเดกเตผ เดเตเดฏเตเดฏเตเด.
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
let controller = UIHostingController(rootView: HomeView().environmentObject(store))
window.rootViewController = controller
self.window = window
window.makeKeyAndVisible()
}
}
}
struct CustomListCoverRow : View {
@EnvironmentObject var store: Store<AppState>
let movieId: Int
var movie: Movie! {
return store.state.moviesState.movies[movieId]
}
var body: some View {
HStack(alignment: .center, spacing: 0) {
Image(movie.poster)
}.listRowInsets(EdgeInsets())
}
}
เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดเดฐเดเดญเดฟเดเตเดเตเดฎเตเดชเตเตพ เดธเตเดฑเตเดฑเตเตผ เดเดฐเต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดเดฌเตโเดเดเตเดฑเตเดฑเดพเดฏเดฟ เดเตเดคเตเดคเดฟเดตเดฏเตเดเตเดเตเดเดฏเตเด @EnvironmentObject เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเต เดเดพเดดเตโเดเดฏเดฟเดฒเตเด เดเดเตโเดธเดธเต เดเตเดฏเตเดฏเดพเดจเตเด เดเดดเดฟเดฏเตเด. เดชเตเตผเดซเตเดฎเตปเดธเต เดชเตเดจเดพเตฝเดฑเตเดฑเดฟ เดเดฒเตเดฒ, เดเดพเดฐเดฃเด เดกเตเดฑเตเดตเต เดเตเดฏเตเดค เดชเตเดฐเตเดชเตเดชเตผเดเตเดเดฟเดเตพ เดตเตเดเดคเตเดคเดฟเตฝ เดตเตเดฃเตเดเตเดเตเดเตเดเตเดเดฏเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เด เดตเดธเตเดฅเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฃเดเตเดเดพเดเตเดเตเดเดฏเต เดเตเดฏเตเดฏเตเดจเตเดจเต.
เดธเดฟเดจเดฟเดฎเดฏเตเดเต เดชเตเดธเตเดฑเตเดฑเตผ เดฎเดพเดฑเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ เดฎเตเดเดณเดฟเดฒเต เดเตเดกเต เดเดฟเดคเตเดฐเด เดฎเดพเดฑเตเดฑเตเดจเตเดจเต.
เดเดคเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดเดฐเต เดตเดฐเดฟ เดเดชเดฏเตเดเดฟเดเตเดเดพเดฃเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเต, เด
เดคเดฟเดจเตเดฑเต เดธเดนเดพเดฏเดคเตเดคเตเดเต เดเดพเดดเตเดเดเตพ เดธเดเดธเตเดฅเดพเดจเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดจเดฟเดเตเดเตพ iOS-เตฝ เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดชเตเดฒเตเด ReSwift-เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเตฝ
เดเดชเตเดชเตเตพ เดจเดฟเดเตเดเตพเดเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดธเดเตเดตเดฎเดพเดเตเดเดฟ เดชเตเดคเดฟเดฏ เดธเดเดธเตเดฅเดพเดจเด เดชเตเดฐเดธเดฟเดฆเตเดงเตเดเดฐเดฟเดเตเดเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเดพเด. เดเตเดเตเดคเตฝ เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดเดคเดพ.
struct CustomListDetail : View {
@EnvironmentObject var store: Store<AppState>
let listId: Int
var list: CustomList {
store.state.moviesState.customLists[listId]!
}
var movies: [Int] {
list.movies.sortedMoviesIds(by: .byReleaseDate, state: store.state)
}
var body: some View {
List {
ForEach(movies) { movie in
NavigationLink(destination: MovieDetail(movieId: movie).environmentObject(self.store)) {
MovieRow(movieId: movie, displayListImage: false)
}
}.onDelete { (index) in
self.store.dispatch(action: MoviesActions.RemoveMovieFromCustomList(list: self.listId, movie: self.movies[index.first!]))
}
}
}
}
เดฎเตเดเดณเดฟเดฒเตเดณเตเดณ เดเตเดกเดฟเตฝ, เดเดฐเต IP-เดจเตเด SwiftUI-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ .onDelete เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดเดพเตป เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต. เดเดคเต เดฒเดฟเดธเตเดฑเตเดฑเดฟเดฒเต เดตเดฐเดฟเดฏเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเดพเตป เดธเดพเดงเดพเดฐเดฃ iOS เดธเตเดตเตเดชเตเดชเต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเดพเตป เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต. เด เดคเดฟเดจเดพเตฝ เดเดชเดฏเตเดเตเดคเดพเดตเต เดกเดฟเดฒเตเดฑเตเดฑเต เดฌเดเตเดเดฃเดฟเตฝ เดธเตเดชเตผเดถเดฟเดเตเดเตเดฎเตเดชเตเตพ, เด เดคเต เด เดจเตเดฌเดจเตเดง เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต เดเตเดฐเดฟเดเตผ เดเตเดฏเตเดฏเตเดเดฏเตเด เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดฟเดจเดฟเดฎ เดจเตเดเตเดเด เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
เดถเดฐเดฟ, เดฒเดฟเดธเตเดฑเตเดฑเต เดชเตเดฐเตเดชเตเดชเตผเดเตเดเดฟ BindableObject เด เดตเดธเตเดฅเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเตเดคเตเดคเดฟเดฐเดฟเดเตเดเดคเตเด เดเดฐเต EnvironmentObject เดเดฏเดฟ เดเตเดคเตเดคเดฟเดตเดฏเตเดเตเดเดชเตเดชเตเดเตเดเดคเตเด เดเดฏเดคเดฟเดจเดพเตฝ, SwiftUI เดฒเดฟเดธเตเดฑเตเดฑเต เด เดชเตเดกเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจเต, เดเดพเดฐเดฃเด ForEach เดธเดฟเดจเดฟเดฎเดเตพ เดเดฃเดเตเดเดพเดเตเดเดฟเดฏ เดชเตเดฐเตเดชเตเดชเตผเดเตเดเดฟเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
MoviesState reducer-เดจเตเดฑเต เดญเดพเดเด เดเดคเดพ:
func moviesStateReducer(state: MoviesState, action: Action) -> MoviesState {
var state = state
switch action {
// other actions.
case let action as MoviesActions.AddMovieToCustomList:
state.customLists[action.list]?.movies.append(action.movie)
case let action as MoviesActions.RemoveMovieFromCustomList:
state.customLists[action.list]?.movies.removeAll{ $0 == action.movie }
default:
break
}
return state
}
เดฎเตเดเดณเดฟเตฝ เดชเดฑเดเตเดเดคเตเดชเตเดฒเต, เดจเดฟเดเตเดเตพ เดเดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เด เดฏเดเตเดเต เดเดฐเต เดชเตเดคเดฟเดฏ เด เดตเดธเตเดฅ เดคเดฟเดฐเดฟเดเต เดจเตฝเดเตเดฎเตเดชเตเตพ เดฑเดฟเดกเตเดฏเตเดธเตผ เดเดเตเดธเดฟเดเตเดฏเตเดเตเดเต เดเตเดฏเตเดฏเดชเตเดชเตเดเตเด.
เดเดพเตป เดเดคเตเดตเดฐเต เดตเดฟเดถเดฆเดพเดเดถเดเตเดเดณเดฟเดฒเตเดเตเดเต เดชเตเดเตเดจเตเดจเดฟเดฒเตเดฒ - เดเดจเตเดคเดพเดฃเต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเตเดฃเตเดเดคเตเดจเตเดจเต เดธเตเดตเดฟเดซเตเดฑเตเดฑเตเดฏเตเดเดเตเดเต เดเดเตเดเดจเต เด
เดฑเดฟเดฏเดพเด. เดเดคเต เดเตเดเตเดคเตฝ เดเดดเดคเตเดคเดฟเตฝ เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเดพเตป, เด
เดคเต เดตเดฟเดฒเดฎเดคเดฟเดเตเดเตเดจเตเดจเต
เดธเตเดเดฟเตฝเดฌเตเดเตเดธเต เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเต:
- เดชเตเดฐเดพเดฏเตเดเดฟเด เดเตเดดเตเดธเต
"เดฎเตเดฌเตเตฝ เดกเตเดตเดฒเดชเตเดชเตผ PRO" .- เดเตบเดฒเตเตป เดเตเดดเตเดธเดฟเดจเต เด เดชเตเดเตเดทเดฟเดเตเดเต
"เดชเตเดคเตเดคเตบ เดกเดพเดฑเตเดฑ เด เดจเดฒเดฟเดธเตเดฑเตเดฑเต" .- เดฐเดฃเตเดเตเดตเตผเดทเดคเตเดคเต เดชเตเดฐเดพเดเตเดเดฟเดเตเดเตฝ เดเตเดดเตเดธเต
"เดเดพเตป เดเดฐเต PRO เดตเตเดฌเต เดกเตเดตเดฒเดชเตเดชเตผ เดเดฃเต" .
เด เดตเดฒเดเดฌเด: www.habr.com