2017-05-25 1 views
1

J'essaie d'implémenter un framework Swift dans mon projet Objective-C. J'ai déjà mis en place tous les Bridge-Headers et ai également écrit @objc avant les fonctions et les classes dans une classe rapide. Il est donc nécessaire de faire ce qui suit, mais le code exemple est donné dans Swift:Accéder à la fonction Swift pour un objet de la classe Objective-C

barView.addBarBackground(startAngle: 90, endAngle: -270, radius: 100, width: 15) 

Je dois exécuter ce code dans la classe Obj-c pour un objet Barview. J'ai essayé de faire ceci, mais cela ne fonctionne pas:

[_barView.addBarBackground startAngle: 90 endAngle: -270 radius: 100 width: 15]; 

Que dois-je faire?

EDIT:

J'ai une connexion IBOutlet:

@property (strong) IBOutlet OGCircularBarView *barView; 

Donc, il y a un objet nommé Barview. J'ai aussi quelques Swift-classe avec le code:

import Cocoa 

@objc public class OGCircularBarView: NSView, Sequence { 
    //... 
    @objc public func addBarBackground(startAngle: CGFloat, endAngle: CGFloat, radius: CGFloat, width: CGFloat, color: NSColor) { 
     //some code 
    } 
    //... 
} 

je dois exécuter ce code (qui est donné à Swift) dans une classe Objective-C:

barView.addBarBackground(startAngle: 90, endAngle: -270, radius: 100, width: 15) 

Comment puis-je réécrire pour que ça marche en Objective-C?

Répondre

1

Essayez ceci:

[_barView addBarBackgroundStartAngle: 90 endAngle: -270 radius: 100 width: 15]; 

Le premier problème est que vous ne pouvez pas utiliser la syntaxe de points pour les méthodes; C'est ce que les parenthèses sont pour: [object message:withArguments:...]

La seconde est que le nom de la fonction Swift est un peu gênant pour la traduction Obj-C. Si vous déclarez la fonction rapide comme suit:

func addBarBackgroundWithStartAngle(_ startAngle: Type, endAngle: Type... 

... il serait traduit à un plus facile à lire:

[_barView addBarBackgroundWithStartAngle: endAngle: ...] 

J'espère que cela aide.

+0

Malheureusement, je dois ajouter un arrière-plan pour un objet nommé barView. Et cet arrière-plan a des paramètres comme startAngle, endAngle, radius, etc. Je dois dire à la fonction addBarBackground, de quel type d'arrière-plan ai-je besoin. Voir mon édition – dvijok

+0

Y-oui. :-) Voilà ce que je réponds. Est-ce que tu l'as essayé? –

+0

Ouais! Je viens de changer la fonction comme tu l'as dit et ça marche :) Merci! – dvijok