2014-06-12 9 views
5

Ich verfüge über eine Beispiel-Objective-C-App, die Salesforce-SDK verwendet. Ich versuche es zu konvertieren, um Swift One-Class zu einer Zeit zu verwenden. Salesforce SDK verfügt über eine Klasse mit dem Namen 'SFRestRequest.h' mit dem Delegaten 'SFRestDelegate'.Wenn Sie versuchen, eine in Objective-C in Swift geschriebene Delegatmethode zu verwenden, wird "Protokollprotokoll nicht gefunden" angezeigt.

In Objective C habe ich eine Klasse namens "RootViewController.h", die eine Unterklasse von UITableViewController ist. Es implementiert SFRestDelegate. Es funktioniert gut.

//RootViewController.h 
#import <UIKit/UIKit.h> 
#import "SFRestAPI.h" 

@interface RootViewController : UITableViewController <SFRestDelegate> { 

    NSMutableArray *dataRows; 
    IBOutlet UITableView *tableView;  

} 

Ich versuche, eine RootVC.swift-Datei zu erstellen, um RootViewController Objective-C-Klasse zu ersetzen.

Ich habe eine Überbrückung Header-Datei, die alle diese Header importiert, die

in Objective-c importiert werden
//SwiftForce-Bridging-Header.h 
#import "SFRestAPI.h" 
#import "SFRestRequest.h" 

Meine RooVC.Swift Datei wie folgt aussieht:

import UIKit 

class RootVC: UITableViewController,SFRestDelegate { 
.. 
.. 
} 

Nun, wenn ich befehle + Klicken Sie auf das SFRestDelegate, es geht korrekt zur Protokollimplementierung. Allerdings, wenn ich zu bauen versuchen, erhalte ich .. "nicht SFRestDelegate Fehlerprotokoll Erklärung

SWIFT_CLASS("_TtC10SwiftForce6RootVC") 
@interface RootVC : UITableViewController <SFRestDelegate> 
@property (nonatomic) NSArray * dataRows; 
- (instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER; 
- (void)viewDidLoad; 
- (void)didReceiveMemoryWarning; 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 
@end 

Jede mögliche Hilfe schätzen finden können Sie es aus durch den Download der App testen können:. https://github.com/rajaraodv/SwiftForce

+0

Ist MytDelegate ein Tippfehler? – Dash

+0

Nein. Das war nur ein Tippfehler, als ich das schrieb. –

Antwort

5

ich habe Ihnen nur eine Pull-Anforderung an den Repo Sie verknüpfen, das das Problem löst.

Ihr Problem ein Problem mit der Ladereihenfolge der Swift und Objective-C-Klassen zu sein scheint und Kopfzeilen. Sie müssen sicherstellen, dass alle von Ihren Swift-Klassen benötigten Header kompiliert werden, bevor der Swift-Code kompiliert wird. Dies wird mit einfachen .h- und .m Objective-C-Dateien ziemlich nahtlos gehandhabt, aber wenn Sie statische Bibliotheken (wie in Ihrem Projekt) verwenden, scheint die .pch-Datei am besten geeignet zu sein, um Header zu importieren, die Ihr Swift-Code beim Kompilieren benötigt Zeit.

folgende Zeile zu SwiftForce-Prefix.pch Datei scheint Hinzufügen zu arbeiten:

#import <SalesforceNativeSDK/SFRestRequest.h>

Das ist nicht sehr elegant scheint (ebenso wie die Bridging-Header-Lösung) aber nur die Zeit wird zeigen, ob Dies ist ein Fehler oder eine Best Practice.

+0

Shameless Stecker, falls diese Antwort für Sie funktioniert: Kommen Sie mit mir und einer Handvoll meiner Schüler das Abenteuer/Gespräch zu kommen, wie wir schnell zusammen lernen: http://learnswift.io – johnnyclem

+0

Danke jonnyclem für die Lösung. Es sieht aus wie ein Bug in Bridging-Header zu mir als Bridging-Header soll das Ding tun, wie ich es verstehe. Zumindest habe ich nichts darüber gefunden, es zur Datei prefix.pch hinzuzufügen. Danke noch einmal! Übrigens, dein Blog ist wirklich cool! –

+0

Danke, das hat für mich funktioniert! Nur ein Hinweis für jemanden wie mich ohne eine Prefix-Datei in einem Projekt: Sie können selbst eine erstellen und in Zieleinstellungen, Build-Einstellungen, 'Prefix Header' angeben. –

Verwandte Themen