考虑我们有 aRootView和 a DetailView。DetailView有它自己的 BindableObject,让我们调用它DetailViewModel,我们有场景:
RootView 可能会被某种全局事件更新,例如丢失的互联网连接或它自己的数据/视图模型RootView处理事件它的内容更新,这是导致新的结构DetailView要创建DetailViewModel由DetailViewon init创建,则会有另一个引用,DetailViewModel并且它的状态(例如选定的对象)将被遗漏我们怎样才能避免这种情况呢?
抱歉我没有提供任何代码。这个问题是关于 Swift UI 的架构概念,我们试图将声明性结构和引用对象与数据结合起来。
现在,我看不到仅保留与适当视图相对应的引用的方法,并且不要将它们永远保留在当前状态的内存/环境中。
让我们添加一些代码来看看如果 VM 是由它的 View 创建的会发生什么
import SwiftUI
import Combine
let trigger = Timer.publish(every: 2.0, on: .main, in: .default)
struct ContentView: View {
@State var …Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种方法可以使用新的Apple框架实现重新连接机制结合使用URLSession发布者
waitsForConnectivity不走运(它甚至没有在自定义会话中调用委托)URLSession.background但在发布过程中崩溃了。我也不明白我们如何以这种方式跟踪进度
有没有人已经尝试过这样做?
更新:
似乎在 Xcode 11 Beta 中waitsForConnectivity 不起作用
upd2:
Xcode 11 GM -waitsForConnectivity正在运行,但只能在设备上运行。使用默认会话,设置标志并实现会话委托。task is waiting for connectivity无论您是否使用带回调的 init 任务,都会调用方法。
public class DriverService: NSObject, ObservableObject {
public var decoder = JSONDecoder()
public private(set) var isOnline = CurrentValueSubject<Bool, Never>(true)
private var subs = Set<AnyCancellable>()
private var base: URLComponents
private lazy var session: URLSession = {
let config = URLSessionConfiguration.default
config.waitsForConnectivity = true
return …Run Code Online (Sandbox Code Playgroud)