我们习惯于在访问集合中的任何元素时使用安全下标。下面是我们的扩展。
extension Collection {
subscript(safe index: Index) -> Element? {
return indices.contains(index) ? self[index] : nil
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将它与绑定对象一起使用时,它给了我一个错误说
下标中的无关参数标签“安全:”
下面是有问题的代码
struct MyView: View {
@ObservedObject var service: service
var body: some View {
List {
ForEach(service.items.indices) { index in
Toggle(isOn: self.$service.items[safe: index]?.isOn ?? false) { // Error: Extraneous argument label 'safe:' in subscript
Text("isOn")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想创建MyViewModel它从网络获取数据然后更新结果数组。MyView应该订阅$model.results并显示List填充结果。
不幸的是,我收到一个关于“没有更多上下文的表达式类型不明确”的错误。
如何正确使用ForEach这种情况?
import SwiftUI
import Combine
class MyViewModel: ObservableObject {
@Published var results: [String] = []
init() {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.results = ["Hello", "World", "!!!"]
}
}
}
struct MyView: View {
@ObservedObject var model: MyViewModel
var body: some View {
VStack {
List {
ForEach($model.results) { text in
Text(text)
// ^--- Type of expression is ambiguous without more context
}
}
}
}
}
struct …Run Code Online (Sandbox Code Playgroud)