【问题标题】:Swift generic variableSwift 泛型变量
【发布时间】:2014-10-18 18:30:59
【问题描述】:

我有一个协议,我想要一个 UIViewController 类型的变量来实现 mu 协议。如果我尝试做类似的事情:

var delegate:UIViewController<BouncingMenuDelegate>?

我收到 UIViewController 是非泛型类型的错误消息。那么问题是如何访问我们在 Objective-C 中用于访问委托的模型?提前谢谢!

【问题讨论】:

    标签: ios generics swift


    【解决方案1】:

    你不能像在 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?
    }
    

    【讨论】:

    • 虽然起初这样做可能很容易。这是一个 hack,应该注意。
    【解决方案2】:

    如果该类实现了一个协议,那么您并不关心它实际上是哪个类。这应该有效:

    var delegate: BouncingMenuDelegate?
    

    【讨论】:

    • 是的,我已经尝试过了,但它不起作用。实际上,我需要访问实现我的协议的 UIViewController 的实例。
    猜你喜欢
    • 2020-04-21
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多