SwiftUI 高级之使用generics创建一个范型struct
目标
将经常复制粘贴的代码打包成可以处理某一类问题的通用代码
代码
import UIKit
//定义协议规范Model函数,用于范型调用
protocol PageModelProtocal:Identifiable,Hashable{
associatedtype T
static func row_page() ->[T]
}
//定义个范型class用于管理页面和更新数据
class PageMgrG<T:PageModelProtocal >:NSObject{
var page = 0
var pageSize = 0
func next() -> [T]{
return T.row_page() as! [T]
}
}
// 遵守协议的struct
struct Author:PageModelProtocal {
var id = UUID()
var name = ""
static func row_page() ->[Self]{
return [
Author(name:"tom"),
Author(name:"jack"),
Author(name:"mary")
]
}
}
// 遵守协议的另外一个struct
struct Writer:PageModelProtocal {
var id = UUID()
var name = ""
var country = ""
static func row_page() ->[Self]{
return [
Writer(name:"tom",country:"China"),
Writer(name:"jack",country:"USA"),
Writer(name:"mary",country:"JP")
]
}
}
//实例化
var pageMgrA = PageMgrG<Author>()
print(pageMgrA.next())
var pageMgrB = PageMgrG<Writer>()
print(pageMgrB.next())
最终效果
同样的代码完成不同类型的处理
参考文献
更多SwiftUI教程和代码关注专栏
- 请关注我的专栏icloudend, SwiftUI教程与源码
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。