(学习 Swift 1 周)可以在体内计算(?)吗?

问题描述 投票:0回答:1
import SwiftUI

struct ContentView: View {
    
    @State private var fiveNumbers: Set<Int> = []
    @State private var twoNumbers: Set<Int> = []
    // there has to be a better way to copy a Set instead of making it a string like this. it includes brackets too....
    // options: remove all [] from string OR find another way to get the numbers into the boxes without being a string
    @State private var fiveSentence = ""
    @State private var twoSentence = ""
    
    var body: some View {
        NavigationStack {
            Form {
                Button("Faz o meu Euromilhões") {
                    fiveNumbers.removeAll()
                    twoNumbers.removeAll()
                    
                    while fiveNumbers.count < 5 {
                        let newRandomNumber = Int.random(in: 1...50)
                            fiveNumbers.insert(newRandomNumber)
                    }
                    let sortedNumbers = fiveNumbers.sorted()
                    fiveSentence = "\(sortedNumbers)"
                    
                    while twoNumbers.count < 2 {
                        let newRandomNumber = Int.random(in: 1...12)
                            twoNumbers.insert(newRandomNumber)
                    }
                    let sortedTwoNumbers = twoNumbers.sorted()
                    twoSentence = "\(sortedTwoNumbers)"
                }
                
                Section("Números") {
                    Text(fiveSentence)
                }
                Section("Estrelas") {
                    Text(twoSentence)
                }
            }
            .navigationTitle("Euromilhões")
            .toolbar {
                if !fiveNumbers.isEmpty {
                    Button("Limpar") {
                        fiveSentence.removeAll()
                        twoSentence.removeAll()
                        fiveNumbers.removeAll()
                        twoNumbers.removeAll()
                    }
                }
            }
        }
    }
}

首先我要说的是,我没有编码经验,而且我是一个绝对的初学者。这是我在使用 100 天 Swift 一周后正在修改的一个一次性项目。

- Q1:这样可以吗,或者我应该在按钮主体之外计算(不确定这是否是正确的术语?):

Button("Faz o meu Euromilhões")

Q2:我尝试变得“聪明”并使用

  • @State private var fiveNumbers: Set<Int> = []

而不是

  • @State private var fiveNumbers: [Int] = []

避免编写更多代码来避免重复的数字。

if !fiveNumbers.contain(newRandomNumber) { fiveNumbers.append(newRandomNumber) }

但是如何将数组放入不带括号的

Text
中?

非常感谢您的时间和耐心!

swift swiftui text set
1个回答
0
投票

Q1:您的做法在形式上是“可以”的。它并不违反 SwiftUI 的工作方式。你并没有真正在

body
ContentView
内进行计算。相反,您将“闭包”(函数)传递给
Button
Button
保存闭包并在稍后点击它(
Button
)时运行它。这就是计算发生的时候。

您这样做的方式对于玩具项目来说也是“可以的”,您不打算长期保留代码,也不打算编写测试用例。

如果这是一个严肃的项目,您可能希望将该代码分解为一个独立的函数,以便您可以为其编写测试。

Q2:这是将

Set<Int>
变成
Text
的一种方法:

        Text(
            fiveNumbers
                .sorted()
                .formatted(ListFormatStyle(memberStyle: .number))
        )
© www.soinside.com 2019 - 2024. All rights reserved.