初始化程序“init(_:)”要求“Binding<String>”符合“StringProtocol”SwiftUI 文本

Swa*_*wit 3 swift swiftui

我正在重写我的应用程序,该应用程序可以通过组合来随机化 SwiftUI 集合中的数字。

import SwiftUI
import Combine

private final class SomeViewState: ObservableObject {
        
        @Published var resultString = ""
        
    }
    
    struct SomeContent: View {
        
        @StateObject private var state = SomeViewState()
        
        func iterateAndRemove() -> (Set<Int>, Set<Int>){
            var numbers = Set<Int>(1...50)
            var results = Set<Int>()
            for _ in 1...3{
                let randomNumbers = numbers.randomElement()!
                results.insert(randomNumbers)
                numbers.remove(randomNumbers)
            }
        return (numbers, results)
        }
        
        var body: some View {
            VStack{
                Text("Some Text")
                    (...)
                
                Text($state.resultString)
                    .multilineTextAlignment(.center)
                    .frame(width: 195, height: 70)
                    .background(Rectangle().fill(Color.white).shadow(radius: 3))
                    .padding()
                
                Button("Randomise") {
                
                    let runFunction = iterateAndRemove()
                    theResult = runFunction.1
                    state.resultString = theResult.map(String.init).joined(separator: ", ")
                    
                }.padding()
Run Code Online (Sandbox Code Playgroud)

如标题所述我得到

Initializer 'init(_:)' requires that 'Binding<String>' conform to 'StringProtocol' SwiftUI Text
Run Code Online (Sandbox Code Playgroud)

错误。我在互联网上找到的唯一解决方案是当按钮抛出此类错误时。请帮忙!

Dáv*_*tor 6

Text显示一个 immutable String,因此它的初始化器采用 a String,而不是 a Binding<String>

所以注入String,而不是 a Binding

Text(state.resultString)
Run Code Online (Sandbox Code Playgroud)

而且,@State只能用在Views 上。resultString应该是@Published,不是@State