提问人:Cabby 提问时间:11/8/2023 最后编辑:Mojtaba HosseiniCabby 更新时间:11/9/2023 访问量:46
SwiftUI / Xcode:ForEach 闭合范围与半开范围 - 文本函数错误。为什么会有这种差异?
SwiftUI / Xcode: ForEach closed range vs half open range - error with Text function. Why the difference?
问:
我有旧的 pascal 和 C 背景,最近开始学习 Swift。 我遇到了一个超出我常识的错误。
以下代码工作正常。
ForEach(0..<12) { word in
Text(String(word))
}
但是一旦 ForEach 从 ..< ... 它给出的错误为 无法将类型为“ClosedRange”的值转换为预期的参数类型“Range”
ForEach(0...12) { word in
Text(String(word))
}
现在这背后的机制/原因是什么? 以棕褐色的老编码背景,很难理解为什么。 感谢您的帮助。
答:
1赞
son
11/8/2023
#1
根据您的示例,有两种类型的范围。
- 第一个是半开范围。创建不包括最终元素的范围。
let half = 0..<5
//Range<Int>
- 第二个是封闭范围。创建包含最终元素的范围。
let closed = 0...5
//ClosedRange<Int>
在 SwiftUI 中,它以参数为参数,所以这就是你遇到错误的原因。它是不同的变量,例如:Float vs Double、Int vs Float 等。您可以在下面的文档中看到。ForEach
Range
public init(_ data: Range, @TableRowBuilder content: @escaping (Int) -> Content) 其中 Data == Range, ID == Int, V == Content.TableRowValue
0赞
Mojtaba Hosseini
11/8/2023
#2
您应该为ClosedRange<Int>
ForEach(0...12, id: \.self) { word in
Text(String(word))
}
在这里,我使用数字本身作为标识符。
💡 你也可以通过实现一个简单的扩展来使它工作,就像这样ForEach
评论