WWDC 2019 เชเชพเชคเซ เชธเซเชเซเช เชเชซ เชง เชฏเซเชจเชฟเชฏเชจ เชธเชคเซเชฐเชฎเชพเช เชนเชพเชเชฐเซ เชเชชเซเชฏเชพ เชชเชเซ, เชฎเซเช SwiftUI เชฎเชพเช เชเชเชกเชพ เชเชคเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช. เชฎเซเช เชคเซเชจเซ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพเชฎเชพเช เชเชฃเซ เชธเชฎเชฏ เชตเชฟเชคเชพเชตเซเชฏเซ เชเซ เช
เชจเซ เชนเชตเซ เชเช เชตเชพเชธเซเชคเชตเชฟเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชตเชฟเชเชธเชพเชตเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช เชเซ เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชตเชฟเชถเชพเชณ เชถเซเชฐเซเชฃเซ เชฎเชพเชเซ เชเชชเชฏเซเชเซ เชฅเช เชถเชเซ.
เชฎเซเช เชคเซเชจเซ MovieSwiftUI เชเชนเชฏเซเช - เช เชจเชตเซ เช
เชจเซ เชเซเชจเซ เชซเชฟเชฒเซเชฎเซ เชถเซเชงเชตเชพเชจเซ เชธเชพเชฅเซ เชธเชพเชฅเซ เชคเซเชจเซ เชธเชเชเซเชฐเชนเชฎเชพเช เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซ
เช เชฎเซ เชฏเชพเชฆ เชเชฐเชพเชตเซเช เชเซเช: Habrเชจเชพ เชคเชฎเชพเชฎ เชตเชพเชเชเซ เชฎเชพเชเซ - Habr เชชเซเชฐเซเชฎเซ เชเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชเชชเชฃ เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชเซเชฐเซเชธเชฎเชพเช เชจเซเชเชงเชฃเซ เชเชฐเชคเซ เชตเชเชคเซ 10 เชฐเซเชฌเชฒ เชกเชฟเชธเซเชเชพเชเชจเซเช.
เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ: เชถเซเชเซเชทเชฃเชฟเช เชเชจเชฒเชพเชเชจ เชเซเชฐเซเชธ
"เชชเซเชฐเซเชซเซเชถเชจ เชเชพเชตเชพ เชกเซเชตเชฒเชชเชฐ" .
เชคเซ MovieSwiftUI เชถเซเช เชเชฐเซ เชถเชเซ?
- API เชธเชพเชฅเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซ - เชฒเชเชญเช เชเซเชเชชเชฃ เชเชงเซเชจเชฟเช เชเชชเซเชฒเชฟเชเซเชถเชจ เช เชเชฐเซ เชเซ.
- เชตเชฟเชจเชเชคเซเช เชชเชฐ เช
เชธเซเชฎเซเชณ เชกเซเชเชพ เชฒเซเชก เชเชฐเซ เชเซ เช
เชจเซ JSON เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเซเชตเชฟเชซเซเช เชฎเซเชกเชฒเชฎเชพเช เชชเชพเชฐเซเชธ เชเชฐเซ เชเซ
เชเซเชกเซเชฌเชฒ . - เชตเชฟเชจเชเชคเซ เชชเชฐ เชฒเซเชก เชเชฐเซเชฒเซ เชเชฌเซเช เชฌเชคเชพเชตเซ เชเซ เช เชจเซ เชคเซเชฎเชจเซ เชเซเชถ เชเชฐเซ เชเซ.
- iOS, iPadOS เช เชจเซ macOS เชฎเชพเชเซเชจเซ เช เชเชชเซเชฒเชฟเชเซเชถเชจ เช OS เชจเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชฎเชพเชเซ เชถเซเชฐเซเชทเซเช UX เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ.
- เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชกเซเชเชพ เชเชจเชฐเซเช เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชคเซเชฎเชจเซ เชชเซเชคเชพเชจเซ เชฎเซเชตเซ เชฒเชฟเชธเซเช เชฌเชจเชพเชตเซ เชถเชเซ เชเซ. เชเชชเซเชฒเชฟเชเซเชถเชจ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชกเซเชเชพเชจเซ เชธเชพเชเชตเซ เชเซ เช เชจเซ เชชเซเชจเชเชธเซเชฅเชพเชชเชฟเชค เชเชฐเซ เชเซ.
- Redux เชชเซเชเชฐเซเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฆเซเชถเซเชฏเซ, เชเชเชเซ เช เชจเซ เชฎเซเชกเชฒ เชธเซเชชเชทเซเช เชฐเซเชคเซ เช เชฒเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เช เชนเซเช เชกเซเชเชพเชจเซ เชชเซเชฐเชตเชพเชน เชฆเชฟเชถเชพเชตเชฟเชนเซเชจ เชเซ. เชคเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชเซเชถเซเชก, เชชเซเชจเชเชธเซเชฅเชพเชชเชฟเชค เช เชจเซ เชซเชฐเซเชฅเซ เชฒเชเซ เชถเชเชพเชฏ เชเซ.
- เชเชชเซเชฒเชฟเชเซเชถเชจ SwiftUI, TabbedView, Segmented Control, NavigationView, Form, Modal, เชตเชเซเชฐเซเชจเชพ เชฎเซเชณเชญเซเชค เชเชเชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ. เชคเซ เชเชธเซเชเชฎ เชตเซเชฏเซ, เชนเชพเชตเชญเชพเชต, UI/UX เชชเชฃ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ.
เชนเชเซเชเชคเชฎเชพเช, เชเชจเชฟเชฎเซเชถเชจ เชธเชฐเชณ เชเซ, GIF เชฅเซเชกเซ เชเชเชเชเซ เชฒเชพเชเซเชฏเซ
เชเชช เชชเชฐ เชเชพเชฎ เชเชฐเชตเชพเชฅเซ เชฎเชจเซ เชเชฃเซ เช เชจเซเชญเชต เชฎเชณเซเชฏเซ เช เชจเซ เชเชเชเชฆเชฐเซ เชคเซ เชธเชเชพเชฐเชพเชคเซเชฎเช เช เชจเซเชญเชต เชนเชคเซ. เชนเซเช เชเช เชธเชเชชเซเชฐเซเชฃ เชเชพเชฐเซเชฏเชพเชคเซเชฎเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเชเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชนเชคเซ, เชธเชชเซเชเซเชฎเซเชฌเชฐเชฎเชพเช เชนเซเช เชคเซเชจเซ เชธเซเชงเชพเชฐเซเชถ เช เชจเซ เชคเซเชจเซ เชเชชเชธเซเชเซเชฐเชฎเชพเช เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซเชถ, เชเช เชธเชพเชฅเซ iOS 13 เชจเชพ เชชเซเชฐเชเชพเชถเชจ เชธเชพเชฅเซ.
Redux, BindableObject เช เชจเซ EnvironmentObject
เชนเซเช เชฒเชเชญเช เชฌเซ เชตเชฐเซเชทเชฅเซ Redux เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชฐเชนเซเชฏเซ เชเซเช, เชคเซเชฅเซ เชนเซเช เชคเซเชฎเชพเช เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชธเชพเชฐเซ เชฐเซเชคเซ เชตเชพเชเซเชซ เชเซเช. เชเชพเชธ เชเชฐเซเชจเซ, เชนเซเช เชคเซเชจเซ เชฎเชพเชเซ เช
เชเซเชฐเชญเชพเชเชฎเชพเช เชเชชเชฏเซเช เชเชฐเซเช เชเซเช
เชธเซเชตเชฟเชซเซเชเชฏเซเชเช เชเชชเซเชฒเซเชเซเชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชกเซเชเชพ เชซเซเชฒเซ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชคเชฐเซเชเซ เชฐเซเชกเชเซเชธเชจเซ เชชเชธเชเชฆ เชเชฐเชตเชพ เชฌเชฆเชฒ เชฎเชจเซ เชเซเชฏเชพเชฐเซเชฏ เช เชซเชธเซเชธ เชฅเชฏเซ เชจเชฅเซ. UIKit เชเชชเซเชฒเชฟเชเซเชถเชจเชฎเชพเช Redux เชจเซ เชเชชเชฏเซเช เชเชฐเชคเซ เชตเชเชคเซ เชธเซเชฅเซ เชชเชกเชเชพเชฐเชเชจเช เชญเชพเชเซ เชธเซเชเซเชฐ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชเซ เช เชจเซ เชกเซเชเชพ เชฎเซเชณเชตเชตเซ เช เชจเซ เชชเซเชจเชเชชเซเชฐเชพเชชเซเชค เชเชฐเชตเซ เช เชจเซ เชคเซเชจเซ เชคเชฎเชพเชฐเชพ เชฆเซเชถเซเชฏเซ/เชเชเชเซเชฎเชพเช เชฎเซเชช เชเชฐเชตเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชฎเชพเชฐเซ เชเชจเซเชเซเชเชฐเซเชธเชจเซ เชเช เชชเซเชฐเชเชพเชฐเชจเซ เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชฌเชจเชพเชตเชตเชพเชจเซ เชนเชคเซ (ReSwift เช เชจเซ ReKotlin เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ). เชธเชพเชฐเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ, เชชเชฐเชเชคเซ เชเซเชก เชเชฃเซ. เชเชฎเชจเชธเซเชฌเซ, เชคเซ (เชนเชเซ เชธเซเชงเซ) เชเชชเชจ เชธเซเชฐเซเชธ เชจเชฅเซ.
เชธเชพเชฐเชพ เชธเชฎเชพเชเชพเชฐ! SwiftUI เชธเชพเชฅเซ เชเชฟเชเชคเชพ เชเชฐเชตเชพเชจเซ เชเชเชฎเชพเชคเซเชฐ เชฌเชพเชฌเชคเซ - เชเซ เชคเชฎเซ Redux เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชฏเซเชเชจเชพ เชเชกเซ เชฐเชนเซเชฏเชพ เชนเซเชต เชคเซ - เชธเซเชเซเชฐเซเชธ, เชธเซเชเซเชเซเชธ เช เชจเซ เชฐเซเชกเซเชฏเซเชธเชฐ เชเซ. @EnvironmentObjectเชจเซ เชเชญเชพเชฐ เชธเซเชตเชฟเชซเซเชเชฏเซเชเช เชฆเซเชตเชพเชฐเชพ เชธเซเชเซเชฐ เชธเชพเชฅเซเชจเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชจเซ เชธเชเชชเซเชฐเซเชฃ เชเชพเชณเชเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชคเซเชฅเซ, เชธเซเชเซเชฐ 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 เชเซ, เชคเซ SwiftUI เชจเซ เชเชพเชฃ เชเชฐเชถเซ เชเซเชฏเชพเชฐเซ PassthroughSubject เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ เชชเชพเชกเชตเชพเชฎเชพเช เชเชตเซเชฒ willChange เชชเซเชฐเซเชชเชฐเซเชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเซเชจเซเช เชฎเซเชฒเซเชฏ เชฌเชฆเชฒเชพเชถเซ. เช เชเชเชฒเชพ เชฎเชพเชเซ เชเซ เชเชพเชฐเชฃ เชเซ BindableObject เช PublisherType เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเซเช เชเชตเชถเซเชฏเช เชเซ, เชชเชฐเชเชคเซ เชชเซเชฐเซเชเซเชเซเชฒ เช เชฎเชฒเซเชเชฐเชฃ เชคเซเชจเชพ เชธเชเชเชพเชฒเชจ เชฎเชพเชเซ เชเชตเชพเชฌเชฆเชพเชฐ เชเซ. เชเชเชเชฆเชฐเซ, เช Apple เชคเชฐเชซเชฅเซ เชเซเชฌ เช เชถเชเซเชคเชฟเชถเชพเชณเซ เชธเชพเชงเชจ เชเซ. เชคเชฆเชจเซเชธเชพเชฐ, เชเชเชพเชฎเซ เชฐเซเชจเซเชกเชฐเชฟเชเช เชธเชพเชฏเชเชฒเชฎเชพเช, เชธเซเชตเชฟเชซเซเชเชฏเซเชเช เชฐเชพเชเซเชฏเชจเชพ เชซเซเชฐเชซเชพเชฐ เช เชจเซเชธเชพเชฐ เชฎเชเชคเชตเซเชฏเซเชจเชพ เชฎเซเชเซเชฏ เชญเชพเชเชจเซ เชฐเซเชจเซเชกเชฐ เชเชฐเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเชถเซ.
เชเชฐเซเชเชฐ, เช เชธเซเชตเชฟเชซเซเชเชฏเซเชเชเชจเซเช เชนเซเชฆเชฏ เช เชจเซ เชเชพเชฆเซ เชเซ. เชนเชตเซ, เชฐเชพเชเซเชฏเชฎเชพเช เชธเชฌเซเชธเซเชเซเชฐเชพเชเชฌ เชเชฐเชจเชพเชฐ เชเซเชเชชเชฃ เชฆเซเชถเซเชฏเชฎเชพเช, เชฐเชพเชเซเชฏเชฎเชพเชเชฅเซ เชเชฏเซ เชกเซเชเชพ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซ เชเซ เช เชจเซ เชถเซเช เชฌเชฆเชฒเชพเชฏเซเช เชเซ เชคเซเชจเชพ เชเชงเชพเชฐเซ เชฆเซเชถเซเชฏ เชฐเซเชจเซเชกเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
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 เชคเชฐเซเชเซ เชเชจเซเชเซเชเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เชชเชเซ @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 เชฐเซเชกเซเชฏเซเชธเชฐเชจเซ เชญเชพเช เชเซ:
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
}
เชเซเชฏเชพเชฐเซ เชคเชฎเซ เชเซเช เชเซเชฐเชฟเชฏเชพ เชฎเซเชเชฒเซ เชเซ เช เชจเซ เชเชชเชฐ เชเชฃเชพเชตเซเชฏเชพ เชฎเซเชเชฌ เชจเชตเซ เชธเซเชฅเชฟเชคเชฟ เชชเชฐเชค เชเชฐเซ เชเซ เชคเซเชฏเชพเชฐเซ เชฐเซเชกเซเชฏเซเชธเชฐ เชเชเซเชเชฟเชเซเชฏเซเช เชฅเชพเชฏ เชเซ.
เชนเซเช เชนเชเซ เชตเชฟเชเชคเชฎเชพเช เชเชเชถ เชจเชนเซเช - เชธเซเชตเชฟเชซเซเชเชฏเซเชเช เชเชฐเซเชเชฐ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฃเซ เชเซ เชเซ เชถเซเช เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเชตเซเช. เชเชจเซ เชตเชงเซ เชเชเชกเชพเชฃเชชเซเชฐเซเชตเช เชธเชฎเชเชตเชพ เชฎเชพเชเซ, เชคเซ เชฎเซเชฒเซเชฏเชตเชพเชจ เชเซ
เชธเซเชเชฟเชฒเชฌเซเชเซเชธ เชญเชฒเชพเชฎเชฃ เชเชฐเซ เชเซ:
- เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ
"เชฎเซเชฌเชพเชเชฒ เชกเซเชตเชฒเชชเชฐ เชชเซเชฐเซ" .- เชเชจเชฒเชพเชเชจ เชเซเชฐเซเชธ เชฒเชพเชเซ เชเชฐเซเชฏเซ
"เชชเชพเชฏเชฅเซเชจ เชกเซเชเชพ เชเชจเชพเชฒเชฟเชธเซเช" .- เชฌเซ เชตเชฐเซเชทเชจเซ เชชเซเชฐเซเชเซเชเชฟเชเชฒ เชเซเชฐเซเชธ
"เชนเซเช เชชเซเชฐเซ เชตเซเชฌ เชกเซเชตเชฒเชชเชฐ เชเซเช" .
เชธเซเชฐเซเชธ: www.habr.com