【发布时间】:2014-10-18 18:30:59
【问题描述】:
我有一个协议,我想要一个 UIViewController 类型的变量来实现 mu 协议。如果我尝试做类似的事情:
var delegate:UIViewController<BouncingMenuDelegate>?
我收到 UIViewController 是非泛型类型的错误消息。那么问题是如何访问我们在 Objective-C 中用于访问委托的模型?提前谢谢!
【问题讨论】:
我有一个协议,我想要一个 UIViewController 类型的变量来实现 mu 协议。如果我尝试做类似的事情:
var delegate:UIViewController<BouncingMenuDelegate>?
我收到 UIViewController 是非泛型类型的错误消息。那么问题是如何访问我们在 Objective-C 中用于访问委托的模型?提前谢谢!
【问题讨论】:
你不能像在 Swift 中那样声明变量类型。
解决问题的最简单方法是将UIViewController 方法/属性添加到BouncingMenuDelegate 要求:
@objc protocol BouncingMenuDelegate {
// Delegate methods
func boudcingMenu(bouncingMenu:BouncingMenu, didSelectItemAtIndex index:Int)
// required methods/properties from UIViewController
var view:UIView { get }
var navigationController:UINavigationController? { get }
func presentViewController(viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)?)
}
class BouncingMenu:UIView {
weak var delegate:BouningMenuDelegate?
}
【讨论】:
如果该类实现了一个协议,那么您并不关心它实际上是哪个类。这应该有效:
var delegate: BouncingMenuDelegate?
【讨论】: