【问题标题】:Can I force protocol conformation in Swift?我可以在 Swift 中强制协议构造吗?
【发布时间】:2014-09-24 05:19:36
【问题描述】:

我想这样做:

UIView <UITextFieldDelegate>*

很快。

使 UIView 子类的对象也符合UITextFieldDelegate 协议。

【问题讨论】:

    标签: ios objective-c swift protocols


    【解决方案1】:

    您可以使用Protocol Composition 表达(id <UITextFieldDelegate, UIScrollViewDelegate>)
    但不能使用(UIView<UITextFieldDelegate> *)。除了类定义。

    // Obj-C
    - (void)methodName:(id <UITextFieldDelegate, UIScrollViewDelegate>)arg { ... }
    
    // Swift
    func methodName(arg:protocol<UITextFieldDelegate, UIScrollViewDelegate>!) { ... }
    

    实际上,声明为- (void)methodName((UIView&lt;UITextFieldDelegate&gt; *))arg; 的Obj-C 方法,当它桥接到Swift 时,您可以使用任何UIView 实例调用。

    编辑:

    经过一番研究,您似乎可以像这样声明您的func

    func myFunc<T:UIView where T:UITextFieldDelegate>(view:T) { ... }
    

    【讨论】:

      【解决方案2】:

      制作UIView的子类,让SubClassedView符合UITextFieldDelegate

      传统方式

      @interface SubClassedView:UIView <UITextFieldDelegate>
      
      @end
      

      迅速

      class SubClassedView:UIView, UITextFieldDelegate {
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多