实例化 4.0.0

实例化 4.0.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布上次发布2019年6月
SPM支持 SPM

tarunon 维护。



实例化 4.0.0

  • 作者
  • tarunon

实例化

Build Status Carthage compatible

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

摘要

Storyboard 和 Nib 不是类型安全的,如果您使用 UIStoryboardUINib,您的代码将变得一团糟。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

StoryboardTypeNibType需要static var storyboard或者static var nib。您需要在自己的类中写入这些值,这相当麻烦……许多开发者将StoryboardName设置为与ClassName相同,如果您的也这样,可以使用InstantiateStandard。这个库添加了StoryboardTypeNibTypeReusable的默认实现。

安装

Carthage

github "tarunon/Instantiate"

Pods

pod 'Instantiate'

需求

平台 版本
iOS 9.0+
macOS 10.11+
tvOS 9.0+
Swift 4.0+

适用于Swift3.x

版本2支持swift3。