2017-10-06 3 views
1

Alors que la migration vers Swift 4.0, je suis confronté à un problème avec @IBInspectable,@IBInspectable à 4.0 Swift

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 
} 

L'erreur qui apparaît est:

propriété ne peut pas être marqué @IBInspectable car son type ne peut pas être représentés en Objective-C

dans Swift 3, il était wo très bien. Je ne comprends pas ce qui s'est mal passé dans Swift 4.

En outre, le compilateur ne montre aucune suggestion. Il montre juste un message d'erreur.

+2

L'erreur est vraiment évidente. Dans vraiment ne pouvait pas travailler dans Swift 3, même si elle a passé la compilation. Comment l'éditeur de l'interface constructeur vous a-t-il cherché dans Swift 3? – Sulthan

+3

Les protocoles sont-ils des protocoles 'class'? et marqué '@ objc'? Notez également que les délégués devraient probablement être «faibles». – Sulthan

+0

Si vous voulez les connecter dans IB, ils doivent être '@ IBOutlet's, pas' @ IBInspectable' –

Répondre

0

Ajouter notation @objc pour les délégués et 4 à Swift source de données (comme indiqué dans le code ci-dessous)

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 
} 


Voici ref. instantané avec une résolution d'erreur:

enter image description here

Voici le document d'Apple pour @objc notation - Protocol - Optional Protocol Requirements