类型安全且可构造器注入的 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+ |