2017-10-06 3 views
1

Während auf Swift 4.0 Migration ich ein Problem bin vor mit @IBInspectable,@IBInspectable in Swift 4.0

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 
} 

Der Fehler, ist angezeigt:

Eigenschaft nicht @IBInspectable markiert werden kann, weil seine Art kann nicht werden in Objective-C vertreten

in Swift 3 war es wo Richtig. Ich verstehe nicht, was in Swift 4 schief gelaufen ist.

Auch der Compiler zeigt keinen Vorschlag. Es zeigt nur eine Fehlermeldung an.

+2

Der Fehler ist wirklich offensichtlich. In Swift 3 konnte es wirklich nicht funktionieren, auch wenn es die Compilation bestanden hat. Wie hat der Editor in Interface Builder in Swift 3 nach dir gesucht? – Sulthan

+3

Sind die Protokolle Protokolle? Klasse? und mit '@ objc' gekennzeichnet? Beachten Sie auch, dass Delegierte wahrscheinlich "schwach" sein sollten. – Sulthan

+0

Wenn Sie sie in IB verbinden möchten, sollten sie '@ IBOutlet's sein, nicht' @ IBInspectable' –

Antwort

0

hinzufügen Notation @objc sowohl für Delegierten und Datenquelle in Swift 4 (wie in Code unten gezeigt)

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 
} 


Hier ref. Schnappschuss mit Fehlerauflösung:

enter image description here

Hier ist Apple-Dokument für @objc Notation - Protocol - Optional Protocol Requirements

Verwandte Themen