SwiftUILazyGridView
创建一个网格视图,允许在显示之前懒加载项。此pod不使用 LazyVGrid
或 LazyHGrid
。
安装
SwiftUILazyGridView 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:
pod 'SwiftUILazyGridView'
优点
ViewModel
维护,因此您不必处理 SwiftUI 状态
不支持的特性
LazyVGrid
示例
Int
的网格,但在显示之前需要预处理。
1. 一个数据源类型为 struct ContentView: View{
var viewModel = LazyGridViewModel<Int, String>(UIScreen.main.bounds.width - 10.0, spacing: 0.0)
init(){
setupData()
}
private func setupData(){
for i in 0..<100{
viewModel.addItem(i)
}
}
var body: some View{
LazyGridView<Int, String>(viewModel) { (input, callback) in
// Processing closure
let processedString = String(format: "Number %d", input)
callback(processedString)
} _: { (processed) -> AnyView in
// View Builder closure
return AnyView(
Text(processed)
)
} _: { (clickedItem) in
guard let index = viewModel.getAllItems().firstIndex (where: { $0?.id == clickedItem?.id }) else { return }
print("You clicked the item at index, \(index)")
self.addRandomItem()
}
}
}
2. 一个具有自定义数据源类型的网格,但在显示之前需要预处理。
struct CustomObject{
var id: Int
var name: String
}
struct ContentView: View{
var viewModel = LazyGridViewModel<CustomObject, String>(UIScreen.main.bounds.width - 10.0, spacing: 0.0)
init(){
setupData()
}
private func setupData(){
for i in 0..<100{
let c = CustomObject(id: i, name: "Random Name")
viewModel.addItem(c)
}
}
var body: some View{
LazyGridView<Int, String>(viewModel) { (input, callback) in
// Processing closure
DispatchQueue.global().async {
// Simulate long running task
let randomDelay = arc4random_uniform(10000000)
usleep(randomDelay)
// Processing complete!
callback(input.name)
}
} _: { (processed) -> AnyView in
// View Builder closure
return AnyView(
Text(processed)
)
} _: { (clickedItem) in
guard let index = viewModel.getAllItems().firstIndex (where: { $0?.id == clickedItem?.id }) else { return }
print("You clicked the item at index, \(index)")
self.addRandomItem()
}
}
}
需求
- iOS 13.0+
- Xcode 11
作者
许可协议
SwiftUILazyGridView 适用于 MIT 许可协议。更多信息请参阅 LICENSE 文件。