协议实现中的 IBOutlet

Posted

技术标签:

【中文标题】协议实现中的 IBOutlet【英文标题】:IBOutlet in protocol implementaion 【发布时间】:2017-06-13 10:20:34 【问题描述】:

我有以下协议:

protocol TextViewInputField 
   var indexPath: IndexPath?  get set 
   var textView: UITextView  get set 
   var lblPlaceHolder: UILabel  get set 
   func updatePHHiddenState()
 

单元TMStyle2Cell 实现此协议如下:

class TMStyle2Cell: UITableViewCell,TextViewInputField 

    @IBOutlet var lblPlaceHolder: UILabel!
    @IBOutlet var textView: UITextView!
    @IBOutlet var viewSeperator: UIView!
    var indexPath: IndexPath?

    func updatePHHiddenState() 

    

为什么会出现以下错误?

TMStyle2Cell 不确认协议TextVeiwInputField

【问题讨论】:

【参考方案1】:

您的协议和实现中的类型不匹配。你需要:

protocol TextViewInputField 
   var indexPath: IndexPath?  get set 
   var textView: UITextView!  get set 
   var lblPlaceHolder: UILabel!  get set 
   func updatePHHiddenState()
 

如果你使用弱 IBOutlets,你还需要包括:

protocol TextViewInputField 
   var indexPath: IndexPath?  get set 
   weak var textView: UITextView!  get set 
   weak var lblPlaceHolder: UILabel!  get set 
   func updatePHHiddenState()
 

最后,小问题,但您的协议中的set 部分可能不是必需的。

【讨论】:

您不应该在 Swift 4.1 中包含 weak。如果你这样做了,编译器会警告你删除它 ('weak' should not be applied to a property declaration in a protocol and will be disallowed in future versions)。【参考方案2】:

协议示例。在 Swift 4.2 中测试。

@objc protocol ImageRepresentable 
    var imageView: UIImageView!  get set 

为了观看。

class ViewA: UIView, ImageRepresentable 
    @IBOutlet weak var imageView: UIImageView!

根据你的情况。

@objc protocol TextViewInputField 
    var indexPath: IndexPath?  get set 
    var textView: UITextView!  get set 
    var lblPlaceHolder: UILabel!  get set 
    func updatePHHiddenState()

【讨论】:

以上是关于协议实现中的 IBOutlet的主要内容,如果未能解决你的问题,请参考以下文章

tomcat实现http协议中的请求方法

Swift中的协议

【iOS】协议(Protocol)和代理(Delegate)

即使在 XCTest 文件中实现类扩展中的方法后,仍会调用协议的默认实现

Kafka 协议实现中的内存优化

MQTT通信协议在Unity中的应用之——JS实现