协议实现中的 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的主要内容,如果未能解决你的问题,请参考以下文章
【iOS】协议(Protocol)和代理(Delegate)