繁体   English   中英

初始化程序 'init(_:)' 要求 'Binding<string> ' 符合 'StringProtocol' SwiftUI 文本</string>

[英]Initializer 'init(_:)' requires that 'Binding<String>' conform to 'StringProtocol' SwiftUI Text

我正在重写我的应用程序,该应用程序使用组合将 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()

如标题中所述,我得到了

Initializer 'init(_:)' requires that 'Binding<String>' conform to 'StringProtocol' SwiftUI Text

错误。 我在 Internet 上找到的唯一解决方案是当按钮引发此类错误时。 请帮忙!

Text显示一个不可变的String ,因此它的初始化程序采用String ,而不是Binding<String>

所以注入String ,而不是Binding

Text(state.resultString)

此外, @State应该只用在View上。 resultString应该是@Published ,而不是@State

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM