实例化
类型安全和可构造注入的 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
支持在使用其他InterfaceBuilder中实现NibInstantiatable的view。NibInstantiatableWrapper支持解决方案。创建新的`UIView`子类,实现NibInstantiatableWrapper,在`init(coder:)` 和 `prepareForInterfaceBuilder`上调用`loadView`。查看http://stackoverflow.com/questions/27807951/how-to-embed-a-custom-view-xib-in-a-storyboard-scene
可重复使用
支持`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。