类型安全且可构造器注入的 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])
支持使用带有 Storyboard 的 viewController。在您的 viewController 类中实现 StoryboardInstantiatable,然后您就可以使用 ViewController(with: Dependency)。
支持使用带有 Nib 的 view。在您的 view 类中实现 NibInstantiatable,然后您就可以使用 View(with: Dependency)。
支持在其他 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。
StoryboardType 和 NibType 需要 static var storyboard 或 static var nib。 您需要在自己的类上编写这些值,这很麻烦...... 许多开发者将 StoryboardName 定义为与 ClassName 相同,如果您也是这样,则可以使用 InstantiateStandard。 此库添加了 StoryboardType、NibType 和 Reusable 的默认实现。
github "tarunon/Instantiate"
pod 'Instantiate'
选择 Xcode 菜单 File > Swift Packages > Add Package Dependency... 并使用 GUI 输入存储库 URL。
Repository: https://github.com/tarunon/tarunon/Instantiate
| 平台 (Platform) | 版本 (Version) |
|---|---|
| iOS | 9.0+ |
| macOS | 10.11+ |
| tvOS | 9.0+ |
| Swift | 4.0+ |