这是我第一次使用协调器模式。虽然我已经意识到它的重要性,但我有一个主要问题。
我浏览了这篇关于这种模式的精彩文章。事实上,我能够使用它自己构建一个演示项目。不过有一点 - 建议使用Xib。并不是专门提到不能使用故事板,但是在文章结尾处通过这些行,让我不这么认为:
强大的力量伴随着巨大的责任(和限制)。要使用这个扩展,你需要为每个 UIViewController 创建一个单独的故事板。故事板的名称必须与 UIViewController 类的名称匹配。此 UIViewController 必须设置为此故事板的初始 UIViewController。
它提到,在Storyboards的情况下,我们应该创建一个扩展并将其用于UIViewController
:
extension MyViewController: StoryboardInstantiable {
}
故事板可实例化:
import UIKit
protocol StoryboardInstantiable: NSObjectProtocol {
associatedtype MyType // 1
static var defaultFileName: String { get } // 2
static func instantiateViewController(_ bundle: Bundle?) -> MyType // 3
}
extension StoryboardInstantiable where Self: UIViewController {
static var defaultFileName: String {
return NSStringFromClass(Self.self).components(separatedBy: ".").last!
}
static func instantiateViewController(_ bundle: Bundle? = nil) -> Self {
let fileName = defaultFileName
let sb = UIStoryboard(name: fileName, bundle: bundle)
return sb.instantiateInitialViewController() as! Self
}
}
查询:
- 正如作者提到的,必须为每个创建单独的Storyboard
UIViewController
,如何在Coordinator 模式中使用 Xib 是一种更好的方式? - 为什么我们需要为每个创建单独的故事板
UIViewController
?我们UIViewController
不能通过不链接任何UIViewController
使用 segues 来使用 's storyboard 标识符吗?这样可以使用标识符调整上述扩展名并轻松实现。