迁移到Swift 4.0时,我遇到了@IBInspectable的问题,

open class SVContactBubbleView: UIView
{
   @IBInspectable open var dataSource: SVContactBubbleDataSource? //ERROR..!!
   @IBInspectable open var delegate: SVContactBubbleDelegate? //ERROR..!!
}

public protocol SVContactBubbleDataSource
{
    //Methods here
}

public protocol SVContactBubbleDelegate
{
    //Methods here
}

出现的错误是:

无法将属性标记为@IBInspectable,因为其类型不能为
在Objective-C中表示

Swift 3中,它工作正常。我不明白Swift 4出了什么问题。

另外,编译器未显示任何建议。它只是显示一条错误消息。

最佳答案

在Swift 4中为委托和数据源添加符号@objc(如下面的代码所示)

open class SVContactBubbleView: UIView {
    @IBInspectable open var dataSource: SVContactBubbleDataSource?
    @IBInspectable open var delegate: SVContactBubbleDelegate?
}

@objc  // add notation here
public protocol SVContactBubbleDataSource
{
    //Methods here
}


@objc  // add notation here
public protocol SVContactBubbleDelegate
{
    //Methods here
}

这是参考。具有错误解决方案的快照:

这是@objc表示法的Apple文档-Protocol - Optional Protocol Requirements

10-08 05:52