实例化 (Instantiate)

Build Status Carthage compatible

类型安全且可构造器注入的 InterfaceBuilder 协议。

概要 (Summary)

Storyboard 和 Nib 不是类型安全的。如果您使用 UIStoryboardUINib,您的代码可能会变得混乱。 Instantiate 采用了类型安全的 Storyboard 和 Nib 协议。让我们使用类型安全的协议来改进我们的代码!

现状 (as is)

let storyboard = UIStoryboard(name: "ViewController", bundle: Bundle.main)
let vc = storyboard.instantiateInitialViewController() as! ViewController
vc.inject([1, 2, 3])

目标 (to be)

import Instantiate
import InstantiateStandard
extension ViewController: StoryboardInstantiatable {}
let vc = ViewController(with: [1, 2, 3])

协议 (Protocols)

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 中调用 loadViewhttp://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

StoryboardTypeNibType 需要 static var storyboardstatic var nib。 您需要在自己的类上编写这些值,这很麻烦...... 许多开发者将 StoryboardName 定义为与 ClassName 相同,如果您也是这样,则可以使用 InstantiateStandard。 此库添加了 StoryboardTypeNibTypeReusable 的默认实现。

安装 (Instalation)

Carthage

github "tarunon/Instantiate"

Pods

pod 'Instantiate'

Swift Package Manager

选择 Xcode 菜单 File > Swift Packages > Add Package Dependency... 并使用 GUI 输入存储库 URL。

Repository: https://github.com/tarunon/tarunon/Instantiate

需求 (Requirement)

平台 (Platform) 版本 (Version)
iOS 9.0+
macOS 10.11+
tvOS 9.0+
Swift 4.0+