SwiftUI 随机但独特的元素
SwiftUI Random but unique elements
我有一个包含 3 种字体的简单数组
var fonts = ["Arial", "System", "Helvetica"]
let randomFont: String
所以用户被要求猜出 3
中的一个
VStack(spacing: 30) {
Text("Which font is \(randomFont)?")
所以这正确显示了 3 个元素之一。
每个都必须使用字体数组的唯一元素,并且...如果字体与 randomFont 相同,则计数器应增加一个。
这是一个硬编码示例:
Button(action: { self.score += 1 }) {
Text("\(randomWord)").font(.custom("Helvetica", size: 40))
}
Button(action: { self.score += 0 }) {
Text("\(randomWord)").font(.custom("Arial", size: 40))
}
Button(action: { self.score += 0 }) {
Text("\(randomWord)").font(.system(size: 40))
}
我需要帮助来随机化字体,但必须使用所有 3 种字体。此外,我需要将用户选择的随机字体与问题中显示的字体进行比较。如果相同(正确答案)加分。
例如
randomFont 是“宋体”
按钮将以随机字体显示 3 个单词(例如 randomFont2 变量)(Arial、Helvetica 或系统都必须使用并且不能重复)如果用户单击带有 Arial 字体的按钮 +1 点将添加到计数器。
这是一个完整的独立示例。我使用了 3 种截然不同的字体(Courier、System 和 Papyrus)进行测试。
fonts.shuffle()
用于随机化字体。
这三个按钮仅在它们使用和查找的字体索引上有所不同,因此我使用私有函数来构造按钮以避免重复。
随机选择的randomFontIndex
使用Int.random(in: 0..<3)
选择一个数字即0
、1
或2
。要添加更多字体,只需将更多字体名称添加到 fonts
数组即可。不过请确保 select 有效的字体名称!
import SwiftUI
struct ContentView: View {
let words = ["birds", "meadow", "butterfly", "flowers"]
@State private var randomFontIndex = 0
@State private var randomFont = "Courier"
@State private var fonts = ["Courier", "System", "Papyrus"]
@State private var score = 0
@State private var randomWord = ""
var body: some View {
VStack(spacing: 30) {
Text("Score: \(score)")
Text("Which font is \(randomFont)?")
buttonFromNumber(0)
buttonFromNumber(1)
buttonFromNumber(2)
}.onAppear { self.newGame() }
}
private func fontFromName(name: String) -> Font {
switch name {
case "System":
return Font.system(size: 40)
default:
return Font.custom(name, size: 40)
}
}
private func buttonFromNumber(_ number: Int) -> some View {
Button(action: {
if number == self.randomFontIndex {
self.score += 1
} else {
self.score -= 1
}
self.newGame()
}) {
Text("\(randomWord)").font(fontFromName(name: fonts[number]))
}
}
private func newGame() {
fonts.shuffle()
randomFontIndex = .random(in: 0..<3)
randomFont = fonts[randomFontIndex]
randomWord = words.randomElement()!
}
}
我有一个包含 3 种字体的简单数组
var fonts = ["Arial", "System", "Helvetica"]
let randomFont: String
所以用户被要求猜出 3
中的一个 VStack(spacing: 30) {
Text("Which font is \(randomFont)?")
所以这正确显示了 3 个元素之一。
每个都必须使用字体数组的唯一元素,并且...如果字体与 randomFont 相同,则计数器应增加一个。
这是一个硬编码示例:
Button(action: { self.score += 1 }) {
Text("\(randomWord)").font(.custom("Helvetica", size: 40))
}
Button(action: { self.score += 0 }) {
Text("\(randomWord)").font(.custom("Arial", size: 40))
}
Button(action: { self.score += 0 }) {
Text("\(randomWord)").font(.system(size: 40))
}
我需要帮助来随机化字体,但必须使用所有 3 种字体。此外,我需要将用户选择的随机字体与问题中显示的字体进行比较。如果相同(正确答案)加分。
例如 randomFont 是“宋体” 按钮将以随机字体显示 3 个单词(例如 randomFont2 变量)(Arial、Helvetica 或系统都必须使用并且不能重复)如果用户单击带有 Arial 字体的按钮 +1 点将添加到计数器。
这是一个完整的独立示例。我使用了 3 种截然不同的字体(Courier、System 和 Papyrus)进行测试。
fonts.shuffle()
用于随机化字体。
这三个按钮仅在它们使用和查找的字体索引上有所不同,因此我使用私有函数来构造按钮以避免重复。
随机选择的randomFontIndex
使用Int.random(in: 0..<3)
选择一个数字即0
、1
或2
。要添加更多字体,只需将更多字体名称添加到 fonts
数组即可。不过请确保 select 有效的字体名称!
import SwiftUI
struct ContentView: View {
let words = ["birds", "meadow", "butterfly", "flowers"]
@State private var randomFontIndex = 0
@State private var randomFont = "Courier"
@State private var fonts = ["Courier", "System", "Papyrus"]
@State private var score = 0
@State private var randomWord = ""
var body: some View {
VStack(spacing: 30) {
Text("Score: \(score)")
Text("Which font is \(randomFont)?")
buttonFromNumber(0)
buttonFromNumber(1)
buttonFromNumber(2)
}.onAppear { self.newGame() }
}
private func fontFromName(name: String) -> Font {
switch name {
case "System":
return Font.system(size: 40)
default:
return Font.custom(name, size: 40)
}
}
private func buttonFromNumber(_ number: Int) -> some View {
Button(action: {
if number == self.randomFontIndex {
self.score += 1
} else {
self.score -= 1
}
self.newGame()
}) {
Text("\(randomWord)").font(fontFromName(name: fonts[number]))
}
}
private func newGame() {
fonts.shuffle()
randomFontIndex = .random(in: 0..<3)
randomFont = fonts[randomFontIndex]
randomWord = words.randomElement()!
}
}