【发布时间】:2016-02-07 19:09:13
【问题描述】:
非常感谢article 在实例化UIViewController 或UIStoryboard 时摆脱使用字符串。
虽然有一点我想改变这种行为。 我不想在类方法中提供 Storyboard 枚举来获取故事板,而是希望这里有一个符合协议的类型。
extension UIStoryboard {
class func storyboard(storyboard: StoryboardRepresentable, bundle: NSBundle? = nil) -> UIStoryboard {
return UIStoryboard(name: storyboard.storyboardName, bundle: bundle)
}
}
protocol StringRawRepresentable: RawRepresentable {
typealias RawValue = String
var rawValue: String { get }
}
protocol StoryboardRepresentable {
var storyboardName: String { get }
}
extension StoryboardRepresentable where Self: StringRawRepresentable {
var storyboardName: String {
return self.rawValue
}
}
enum SomeOtherEnum: String, StoryboardRepresentable {
case BlaMain
case BlaSub
case BlaSomeThing
var storyboardName: String { return self.rawValue }
}
这样(假设您有几个对使用此实现感兴趣的模块)模型本身可以具有符合 StoryboardRepresentable 的新枚举类型,而不是拥有一个集中的枚举,了解所有正在使用的故事板,从而创建依赖关系。
这是我的问题。虽然我已经在扩展中实现了 storyboardName,但是当我删除 SomeOtherEnum 上的 storyboardName 时,我收到了一个编译器错误,抱怨不符合协议!?
【问题讨论】: