我正在重写我的应用程序,该应用程序可以通过组合来随机化 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)
错误。我在互联网上找到的唯一解决方案是当按钮抛出此类错误时。请帮忙!
Text
显示一个 immutable String
,因此它的初始化器采用 a String
,而不是 a Binding<String>
。
所以注入String
,而不是 a Binding
。
Text(state.resultString)
Run Code Online (Sandbox Code Playgroud)
而且,@State
只能用在View
s 上。resultString
应该是@Published
,不是@State
。