You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift学习1周:按钮计算逻辑是否应移出body?Set转无括号文本方法

SwiftUI Euromilhões项目问题解答

问题1:按钮计算逻辑的位置

  • 写在body内可行但不推荐。body是视图的渲染核心区域,每次视图状态变化触发刷新时,body内的所有代码都会重新执行。如果计算逻辑复杂,会拖慢渲染速度,还会让视图代码变得臃肿,不利于后续维护和修改。
  • 正确的做法是把计算逻辑抽离成独立的私有方法,放在View结构体内部。按钮的action闭包只需要调用这个方法即可,代码结构更清晰,也方便复用和测试。
    示例代码:
struct EuromilhoesGeneratorView: View {
    @State private var fiveNumbers: Set<Int> = []
    
    var body: some View {
        Button("Faz o meu Euromilhões") {
            generateMainNumbers()
        }
    }
    
    private func generateMainNumbers() {
        fiveNumbers.removeAll()
        while fiveNumbers.count < 5 {
            fiveNumbers.insert(Int.random(in: 1...50))
        }
    }
}

问题2:Set转无括号的显示字符串

Set本身是无序且默认打印带括号的,要转换成适合Text显示的字符串,步骤如下:

  1. 用sorted()把Set转成排序后的数组(默认升序,如需降序用sorted(by: >))
  2. 把数组里的每个Int转成String
  3. 用joined(separator:)方法用指定分隔符拼接成完整字符串

直接在Text里使用的示例:

Text(fiveNumbers.sorted().map { String($0) }.joined(separator: " • "))

或者更简洁的写法:

Text(fiveNumbers.sorted().map(String.init).joined(separator: " - "))

这样就能得到类似3 - 12 - 25 - 37 - 49的无括号字符串,直接用于Text组件显示。

内容的提问来源于stack exchange,提问作者Adjadj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:32:45