clean-architecture-swiftui icon indicating copy to clipboard operation
clean-architecture-swiftui copied to clipboard

Question: about your article of stranger-things-swiftui-state

Open dochoi-bot opened this issue 4 years ago • 2 comments

Hi First of all, thank you I'm learning a lot about clean architecture for Swift UI from you

stranger-things-swiftui-state in the "Clean Architecture for SwiftUI" article, "Coordinator is history" Section In this scenario,

struct TestView: View {

    let publisher = PassthroughSubject<String, Never>()    // 1
    let publisher = CurrentValueSubject<String, Never>("") // 2
    
    var body: some View {
        MyView(publisher: publisher.eraseToAnyPublisher())
    }
}

Scenario 2 works differently.

Here's my code.

import SwiftUI

@main
struct TestSwiftUIApp: App {
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
import SwiftUI
import Combine

struct ContentView: View {
    let publisher = CurrentValueSubject<String, Never>("") // 2
    var body: some View {
        MyView(publisher: publisher.eraseToAnyPublisher())
    }
    
}

struct MyView: View {
    
    let publisher: AnyPublisher<String, Never>
    
    @State var text: String = ""
    @State var didAppear: Bool = false
    
    var body: some View {
        Text(text)
            .onAppear { self.didAppear = true }
            .onReceive(publisher) {
                print("onReceive")
                self.text = $0
            }
    }
}

image

my answer is 1...

also

struct MyView: View {
    
    let publisher: AnyPublisher<String, Never>
    
    @State var text: String = ""
    @State var didAppear: Bool = false
    
    var body: some View {
        Text(text)
            .onAppear { self.didAppear = true
                self.text = "abc"
            }
            .onReceive(publisher) {
                print("onReceive")
                self.text = $0
            }
    }
}

my answer is "abc"...

image

The result is different because of SwifttUI 2.0? or I'm missing something?

Thanks

dochoi-bot avatar Nov 29 '20 15:11 dochoi-bot

Possibly a SwiftUI 2.0 change. Could you try running this on iOS 13?

nalexn avatar Nov 29 '20 15:11 nalexn

I just installed the 13.0 simulator. and built. Here's my code

import SwiftUI
import Combine

struct ContentView: View {
    let publisher = CurrentValueSubject<String, Never>("") // 2
    var body: some View {
        MyView(publisher: publisher.eraseToAnyPublisher())
    }
    
}

struct MyView: View {
    
    let publisher: AnyPublisher<String, Never>
    
    @State var text: String = ""
    @State var didAppear: Bool = false
    
    var body: some View {
        Text(text)
            .onAppear { self.didAppear = true
                self.text = "abc"
                print(UIDevice.current.systemVersion)
            }
            .onReceive(publisher) {
                print("onReceive")
                self.text = $0
            }
    }
}

image

Something seems to be updated

dochoi-bot avatar Nov 29 '20 16:11 dochoi-bot