Instantiate
类型安全且可构造注入的 InterfaceBuilder 协议。
摘要
Storyboard 和 Nib 不是类型安全的,如果您使用 UIStoryboard
或 UINib
,您的代码可能会变得混乱。Instantiate 使用类型安全的协议来处理 Storyboard 和 Nib,让我们通过类型安全的协议来改进我们的代码!
现状
let storyboard = UIStoryboard(name: "ViewController", bundle: Bundle.main)
let vc = storyboard.instantiateInitialViewController() as! ViewController
vc.inject([1, 2, 3])
目标
import Instantiate
import InstantiateStandard
extension ViewController: StoryboardInstantiatable {}
let vc = ViewController(with: [1, 2, 3])
协议
StoryboardInstantiatable
支持使用Storyboard来使用viewController。在viewController类中实现StoryboardInstantiatable,然后你可以使用ViewController(with: Dependency)。
NibInstantiatable
支持使用Nib来使用view。在view类中实现NibInstantiatable,然后你可以使用View(with: Dependency)。
NibInstantiatableWrapper
支持在使用NibInstantiatable的其他InterfaceBuilder中。NibInstantiatableWrapper支持解决方案。创建一个新的UIView子类,实现NibInstantiatableWrapper,在init(coder:)和prepareForInterfaceBuilder中调用loadView。请参阅http://stackoverflow.com/questions/27807951/how-to-embed-a-custom-view-xib-in-a-storyboard-scene
Reusable
支持UITableViewCell / UICollectionViewCell的可重用功能。实现Reusable后,你可以使用Cell.dequeue(from: Parent, for: IndexPath, with: Dependency)来脱队cell。
InstantiateStandard
StoryboardType
和NibType
需要static var storyboard
或static var nib
。你需要自己写下这些值,很麻烦...许多开发者定义StoryboardName与ClassName相同,如果你也是,可以使用InstantiateStandard
。这个库添加了默认实现StoryboardType
、NibType
和Reusable
。
安装
Carthage
github "tarunon/Instantiate"
Pods
pod 'Instantiate'
要求
平台 | 版本 |
---|---|
iOS | 9.0+ |
macOS | 10.11+ |
tvOS | 9.0+ |
Swift | 4.0+ |
Swift3.x专用
版本2支持swift3。