这里简短的问题:
我得到了一个协议protocol SCResourceModel {..}和一个字典,它将使用这种协议类型作为密钥:[SCResourceModel : String].这显然不起作用,因为字典中的键必须符合协议Hashable.使我SCResourceModel继承Hashable或尝试这样的东西[protocol<SCResourceModel, Hashable> : String]显然不起作用,因为Hashable或者Equatable只能用作通用约束而不是类型本身.
我观看了WWDC 2015和Swift 2.0,可以为协议添加约束,例如:protocol SCResourceModel where Self: Hashable {..}直接解决这个问题(非常好).
无论如何,我的问题是:我可以用当前的Swift 1.2版本做一些类似的东西,并以某种方式使用这个协议作为字典的关键吗?或者任何人都可以提出一个很好的解决方法或其他我可能忽略的东西?
我目前在Swift 1.2中看到的唯一解决方案是将协议转换为继承自例如NSObject的类,并且必须进行子类化以便在我的API中进一步使用.
谢谢你的帮助!
我一直在努力解决这个问题,但是我无法找到解决方案:
我有一个支持所有设备系列的iOS 9应用程序,使用大小类并使用Swift 2.0进行编程.我正在使用a UISplitViewController,一切都按照我的要求工作,除了在崩溃的环境中(例如在iPhone上).
Master-ViewController是在UITableViewController选择单元格时触发替换segue的.在折叠环境中,这意味着detailViewcontroller被推送到屏幕上.在UISplitViewController视觉上表现有点像UINavigationController.但是,当我使用后退按钮或滑动手势关闭detailViewController时,在Master-ViewController中触发新的替换segue之前,它不会被释放.
我认为这是一个特征UISplitViewController,因为它最初设计为显示彼此相邻的两个内容.然而,在崩溃的环境中,我希望我UISplitViewController的行为像一个简单的UINavigationController,在弹出时释放先前推送的detailviewController.
viewControllers在弹出detailViewController后,我一直在尝试手动更改splitViewController的属性:
if let firstVc = self.splitViewController?.viewControllers.first {
self.splitViewController?.viewControllers = [firstVc]
}
Run Code Online (Sandbox Code Playgroud)
但这没有用.简单地用一个空的"Dummy"-ViewController替换detailViewController也不起作用,因为它会自动动画转换.和UISplitViewControllerDelegate我一起玩并没有帮助我...
有没有解决方案(也许简单?:)),我太盲目了?