添加自定义数组SwiftUI的元素

Posted

技术标签:

【中文标题】添加自定义数组SwiftUI的元素【英文标题】:Add elements of custom array SwiftUI 【发布时间】:2020-08-08 18:13:42 【问题描述】:

所以我有一个Dice 的结构,它附加了一些属性。我希望能够将它们全部加在一起,这样我就有了一个干净的价值。这是结构:

struct Dice: Identifiable, Hashable 
    var id = UUID()
    var displayValue: String
    var initialValue: Int
    var endingValue: Int
            
    mutating func roll() 
        let randomInt = Int.random(in: initialValue..<endingValue)
        displayValue = "\(randomInt)"
        print("Initial: \(initialValue), EndingValue: \(endingValue), Display: \(displayValue)")
    

它们存储在此处的数组中:@State var viewArray: [Dice] = [],然后显示在此处的 ForEach 中:

ForEach(0..<viewArray.count, id: \.self)  index in
    DiceView(dice: viewArray[index])
    .onTapGesture 
        self.viewArray.remove(at: index)
        withAnimation(.spring()) 
          
        
    

我想做的事情是抓住viewArray 中每个项目的displayValue 并将它们加在一起。这样做的最佳方法是什么?我假设我需要根据displayValue 的属性创建某种数组,然后将该数组相加,但我还没有遇到过。

【问题讨论】:

所以你想从数组中的所有 displayValue 字符串中创建一个字符串,我建议map 将属性放入一个数组,然后joined 从数组中创建一个字符串 哎呀!那是我的错,displayValue 实际上应该是Int 但基本上是的。我将如何使用 map 直接获取 displayValue 属性?我看到的示例仅用于获取直接值,但由于我的数组是自定义类型,我如何映射自定义值? 不确定我是否遵循,map 的主要用途是获取单个属性。也许你应该阅读使用map 【参考方案1】:

如果我理解正确,你可以试试map + reduce

假设displayValueInt 类型(正如您在cmets 中提到的):

var viewArray: [Dice] = ...
let sum = viewArray.map(\.displayValue).reduce(0, +)

假设displayValueString 类型,您需要先将其转换为Int

var viewArray: [Dice] = ...
let sum = viewArray.map(\.displayValue).compactMap(Int.init).reduce(0, +)

【讨论】:

谢谢!我想我最终解决了它,但有点冗长:let rollValues = viewArray.compactMap Int($0.displayValue) let total = rollValues.reduce(0,+) print("\(total)") 我认为原理相同但方法不同。谢谢!【参考方案2】:

根据@joakim,我最终通过创建解决了这个问题:

 let rollValues = viewArray.compactMap  Int($0.displayValue) 
    let total = rollValues.reduce(0,+)
    print("\(total)")

然后将其分配给我需要显示的变量。像魅力一样工作!

【讨论】:

以上是关于添加自定义数组SwiftUI的元素的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中创建一个包含自定义类数组的列表

如何使用 Equatable 创建扩展以删除自定义数组元素?

动态扩展数组长度(自定义)

C++ 运算符重载四(自定义数组类)

量化投资_Multicharts数组操作函数_append()追加函数(自定义)

php自定义函数及内部函数----数组处理函数