九江学网站建设最佳磁力搜索引擎
SwiftUI 高级之使用generics创建一个范型struct
目标
将经常复制粘贴的代码打包成可以处理某一类问题的通用代码
代码
import UIKit
//定义协议规范Model函数,用于范型调用
protocol PageModelProtocal:Identifiable,Hashable{associatedtype Tstatic func row_page() ->[T]
}
//定义个范型class用于管理页面和更新数据
class PageMgrG<T:PageModelProtocal >:NSObject{var page = 0var pageSize = 0func 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())
最终效果
同样的代码完成不同类型的处理

Jietu20200131-152109@2x.jpg
参考文献
- SwiftUI 基础之Generics 通用代码
更多SwiftUI教程和代码关注专栏
- 请关注我的专栏icloudend, SwiftUI教程与源码
https://www.jianshu.com/c/7b3e3b671970