2014-06-12 6 views
5

Salesforce'un SDK'sını kullanan mevcut bir Sample Objective-C uygulamasına sahibim. Bir kerede Swift tek sınıf kullanmak için onu dönüştürmeye çalışıyorum. Salesforce SDK'sının 'SFRestDelegate' temsilcisine sahip 'SFRestRequest.h' adlı bir sınıfı var.Swift'de Objective-C'de yazılmış bir temsilci yöntemini kullanmaya çalışmak, "Protokol Bildirimi bulamıyor" atar

Objective C'de, UITableViewController'ın bir alt sınıfı olan 'RootViewController.h' adlı bir sınıf var. SFRestDelegate uygular. İyi çalışıyor.

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

@interface RootViewController : UITableViewController <SFRestDelegate> { 

    NSMutableArray *dataRows; 
    IBOutlet UITableView *tableView;  

} 

Ben RootViewController Amaç-c sınıfı değiştirmek için bir RootVC.swift dosyası oluşturmak için çalışıyorum.

Ben

//SwiftForce-Bridging-Header.h 
#import "SFRestAPI.h" 
#import "SFRestRequest.h" 

Benim RooVC.Swift dosya benziyor amaç-c ithal edilmektedir tüm bu başlıkları ithal bir köprü başlık dosyası vardır: Ben komuta eğer

import UIKit 

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

Şimdi + SFRestDelegate tıklayın, doğru bir şekilde protokol uygulamasına gider. Ben oluşturmaya çalışırsanız Ancak, ben olsun .. "Protokolü bildirimi SFRestDelegate Hatası bulamıyor

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 

herhangi bir yardım takdir Sen uygulamayı indirerek test edebilirsiniz:!. https://github.com/rajaraodv/SwiftForce

+0

MytDelegate bir yazım hatası mı? – Dash

+0

Hayır. Bu yazdığımda sadece bir yazım hatasıydı. –

cevap

5

Size sorunu çözen repo için bir çekme isteği gönderdim.

Sorununuz, Swift ve Objective-C sınıflarının yükleme sırası ile ilgili bir sorun gibi görünüyor. ve başlıklar. Swift sınıfınızın derlenmesinden önce Swift sınıflarınızın gerektirdiği başlıkların derlendiğinden emin olmalısınız. Bu, basit .h ve .m Objective-C dosyalarıyla oldukça sorunsuz bir şekilde işlenir, ancak statik kitaplıkları kullanırken (projenizdeki gibi) .pch dosyası, Swift kodunuzun derlenmesini gerektiren herhangi bir üstbilgiyi içe aktarmak için en uygun yer gibi görünür. zaman. Bu (tıpkı Köprü-Başlık çözümü gibi) çok şık görünmüyor

#import <SalesforceNativeSDK/SFRestRequest.h>

ancak sadece zaman eğer söyleyecektir: En SwiftForce-Prefix.pch dosyasına bu satırı ekleme

iş gibi görünüyor Bu bir hata ya da en iyi uygulamadır.

+0

Utanmaz fiş, bu cevabın sizin için işe yaraması durumunda: birlikte çabuk öğrendiğimiz gibi öğrencilerimle ve öğrencilerimin bir avuçla maceraya/konuşmaya katılın: http://learnswift.io – johnnyclem

+0

Çözüm için teşekkürler jonnyclem. Köprü-başlıktaki bir hataya benziyor, çünkü köprüleme-başlığı bunu anladığım kadarıyla yapıyor. En azından prefix.pch dosyasına eklemeyle ilgili hiçbir şey bulamadım. Tekrar teşekkürler! BTW, blogunuz gerçekten harika! –

+0

Teşekkürler, bu benim için çalıştı! Bir projede önek dosyası olmadan benim gibi biri için sadece bir not: kendiniz bir tane oluşturabilir ve bunu hedef ayarlarda yapabilir, kurulum ayarlarını yapabilirsiniz, 'Önek Başlığı'. –