我正在重写我的应用程序,该应用程序可以通过组合来随机化 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只能用在Views 上。resultString应该是@Published,不是@State。
| 归档时间: |
|
| 查看次数: |
6037 次 |
| 最近记录: |