无法通过调试器查看传递的 SwiftUI 参数值
Unable to view a passing SwiftUI parameter value via debugger
场景: 我想在调试器中查看 CountryRegionListModel() 的一个参数。
以下是视图及其依赖模型片段:
import Combine
import UIKit
protocol URLResource {
associatedtype DataModel: Decodable
var url: URL? { get }
}
struct CovidResource<T: Decodable>: URLResource {
typealias DataModel = T
var url = URL(string: "https://disease.sh/v3/covid-19/apple/countries/Canada")
}
// =====================================================================================================
class CountryRegionListModel: ObservableObject {
@Published var countryRegionList: [String] = []
// Data Persistence:
var cancellables: Set<AnyCancellable> = []
// ---------------------------------------------------------------------------
func getList<Resource>(urlDataModel: Resource) where Resource: URLResource {
let remoteDataPublisher = URLSession.shared.dataTaskPublisher(for: urlDataModel.url!)
.map(\.data)
.receive(on: DispatchQueue.main)
.decode(type: Resource.DataModel.self, decoder: JSONDecoder())
remoteDataPublisher
.sink(receiveCompletion: { completion in
switch completion {
case .finished:
print("Publisher Finished")
case let .failure(anError):
Swift.print("received error: ", anError)
}
}, receiveValue: { [self] someValue in
self.countryRegionList = someValue as! [String]
}).store(in: &cancellables)
}
}
在这里,我调用了一个子选择器视图来显示注入其中的数据。
我想通过调试器检查此数据:countryListViewModel.countryRegionList:
CountryRegionPickerView(countryRegionList: $countryListViewModel.countryRegionList)
我不明白为什么会这样。
我如何检查是否有数据传递到子视图中?
由于您的 countryListViewModel
存储在 属性 包装器中,因此没有存储的 属性 名为 countryListViewModel
。相反,存储的 属性 被命名为 _countryListViewModel
。调试器不理解这一点(可能是因为编译器没有在调试信息中正确解释它)。
countryListViewModel
属性 实际上是一个计算的 属性,它的 getter 本质上只是 _countryListViewModel.wrappedValue
。所以试试这个:
po _countryListViewModel.wrappedValue.countryRegionList
或者(因为 countryRegionList
也是一个包装 属性)可能是这样的:
po _countryListViewModel.wrappedValue._countryRegionList.wrappedValue
场景: 我想在调试器中查看 CountryRegionListModel() 的一个参数。
以下是视图及其依赖模型片段:
import Combine
import UIKit
protocol URLResource {
associatedtype DataModel: Decodable
var url: URL? { get }
}
struct CovidResource<T: Decodable>: URLResource {
typealias DataModel = T
var url = URL(string: "https://disease.sh/v3/covid-19/apple/countries/Canada")
}
// =====================================================================================================
class CountryRegionListModel: ObservableObject {
@Published var countryRegionList: [String] = []
// Data Persistence:
var cancellables: Set<AnyCancellable> = []
// ---------------------------------------------------------------------------
func getList<Resource>(urlDataModel: Resource) where Resource: URLResource {
let remoteDataPublisher = URLSession.shared.dataTaskPublisher(for: urlDataModel.url!)
.map(\.data)
.receive(on: DispatchQueue.main)
.decode(type: Resource.DataModel.self, decoder: JSONDecoder())
remoteDataPublisher
.sink(receiveCompletion: { completion in
switch completion {
case .finished:
print("Publisher Finished")
case let .failure(anError):
Swift.print("received error: ", anError)
}
}, receiveValue: { [self] someValue in
self.countryRegionList = someValue as! [String]
}).store(in: &cancellables)
}
}
在这里,我调用了一个子选择器视图来显示注入其中的数据。
我想通过调试器检查此数据:countryListViewModel.countryRegionList:
CountryRegionPickerView(countryRegionList: $countryListViewModel.countryRegionList)
我不明白为什么会这样。
我如何检查是否有数据传递到子视图中?
由于您的 countryListViewModel
存储在 属性 包装器中,因此没有存储的 属性 名为 countryListViewModel
。相反,存储的 属性 被命名为 _countryListViewModel
。调试器不理解这一点(可能是因为编译器没有在调试信息中正确解释它)。
countryListViewModel
属性 实际上是一个计算的 属性,它的 getter 本质上只是 _countryListViewModel.wrappedValue
。所以试试这个:
po _countryListViewModel.wrappedValue.countryRegionList
或者(因为 countryRegionList
也是一个包装 属性)可能是这样的:
po _countryListViewModel.wrappedValue._countryRegionList.wrappedValue