swiftui - .identified(by:) 已弃用?
问题描述
此代码以前在 Xcode11 Beta 4 中工作。在最新的 Beta 5 中,我在“.identified(by:)”代码块上遇到错误。
我查看了 XCode11 Beta 5 的发行说明,但没有看到任何对 .identified(by:) 的引用被弃用。
import SwiftUI
import Combine
struct Popups: Decodable {
let name, truckRating, upcomingLocation, cuisine, truckImage, region,
city, state, currentLocation, numberOfRatings, truckExpense : String
}
class NetworkManager: ObservableObject {
var objectWillChange = PassthroughSubject<NetworkManager, Never>()
var popups = [Popups]() {
didSet {
objectWillChange.send(self)
}
}
init() {
guard let url = URL(string:
"https://www.example.com/db.json") else { return }
URLSession.shared.dataTask(with: url) { (data, _, _) in
guard let data = data else { return }
let popups = try! JSONDecoder().decode([Popups].self, from: data)
DispatchQueue.main.async {
self.popups = popups
}
print("Completed fetching JSON")
}.resume()
}
}
struct ItemsView: View {
@State var networkManager = NetworkManager()
var body: some View {
NavigationView {
List (
networkManager.popups.identified(by: \.name)
) { popup in
ItemsRowView(popup: popup)
}.navigationBarTitle(Text("Pop Ups"))
}
}
}
错误消息指出“类型 '[Popups]' 的值没有成员 'identified'”
解决方案
.identified(by:)
已弃用。正如您正确指出的那样,Xcode beta 的发行说明中没有说明这一点,但 iOS beta 的发行说明中没有说明,这就是您找不到它的原因。这有点令人困惑,因为与 SwiftUI 相关的更改分散在 iOS 13 beta、Xcode 11 beta 和 macOS Catalina beta 的发行说明中。
Collection 协议上的 identify(by:) 方法已被弃用,取而代之的是专用的 init( :id:selection:rowContent:) 和 init( :id:content:) 初始化程序。(52976883, 52029393)
但identified(by:)
弃用发生在 beta 4 中,因此以下内容也适用:
以前的 beta 中不推荐使用的 SwiftUI API 现在已删除。(52587863)
这个问题有点像SwiftUI ForEach 'identified(by:)' is deprecated。使用 ForEach(_:id:) 或 List(_:id:),但是在发行说明中提到弃用位置的混乱值得将其作为一个单独的问题保留。
推荐阅读
- c# - 配置 HttpClientFactory 以使用当前请求上下文中的数据
- jquery - 重定向页面并检测它是否已加载
- angular - 如何使用 Angular 通用创建 Angular 自定义元素:SSR
- javascript - 如何限制输入数字范围?
- c++ - 根据 C++ 中的外部输入选择类
- python - 正则表达式没有字符应该重复
- python - 如何从 numpy 数组中删除一个元素,然后将其放回列表中
- javascript - JavaScript:异构数组 - HashMap 或 HashTable
- ios - 如何以编程方式创建动态文本字段
- c# - QR 码扫描仪与 C# WPF 的集成