swift 无法将类型“ClosedRange”的值转换< Int>为预期的参数类型“Range< Int>”

olhwl3o2  于 2023-11-16  发布在  Swift
关注(0)|答案(3)|浏览(167)

我有这样的代码:

VStack {
    ForEach(0...2) { i in
        HStack {
            ForEach(0...2) { j in
                Text("test")
            }
        }
    }
}

字符串
这给予我两个ForEach语句上的错误Cannot convert value of type 'ClosedRange<Int>' to expected argument type 'Range<Int>'
我已经看到了这个错误的线程,有点了解范围的工作原理,但不是真的。我想知道如何修复这个错误。

62o28rlo

62o28rlo1#

可以使用ClosedRange,但使用不同的ForEach构造函数,提供id,如

VStack {
        ForEach(0...2, id: \.self) { i in
            HStack {
                ForEach(0...2, id: \.self) { j in
                    Text("test")
                }
            }
        }
    }

字符串

6vl6ewon

6vl6ewon2#

您可以使用..<而不是...,使范围的类型为Range<Index>而不是ClosedRange<Index>

VStack {
        ForEach(0..<2) { i in
            HStack {
                ForEach(0..<2) { j in
                    Text("test")
                }
            }
        }
    }

字符串

r1zhe5dt

r1zhe5dt3#

如果你用一个简单的helper初始化器扩展ForEach,它就可以工作,比如:

extension ForEach where Data == Range<Int>, ID == Int, Content : View {
    public init(_ range: ClosedRange<Int>, @ViewBuilder content: @escaping (Int) -> Content) {
        self.init(range.lowerBound..<(range.upperBound+1), id: \.self, content: content)
    }
}

字符串


的数据

相关问题