2015-01-17 21 views
49

Bazı Pod'ları almak için CocoaPods yeni çerçeve kurulumunu kullanıma sunmaya çalışıyorum ve Objective-C projemde Swift olanı kullanırken sorun yaşıyorum.Objective-C Project'te Swift Pod Framework nasıl alınır ve kullanılır

İlk şeyler ilk, bu CocoaPods prerelease 0.35'tür, here'u nasıl kullanacağınız ve kuracağınızı okuyabilirsiniz.

source 'https://github.com/CocoaPods/Specs.git' 

platform :ios, '8.0' 

pod 'MBProgressHUD' 
pod 'SLPagingViewSwift' 

MBProgressHUD ortak eğirme göstergesidir ve SLPagingViewSwift ben cocoapods aramaya Swift yazarak bulundu rastgele bir projedir:

İşte benim şimdiki Podfile bu. sadece onu tahsis ve başlatmak için bir sorun olmamalı, böylece Gördüğünüz gibi

class SLPagingViewSwift: UIViewController, UIScrollViewDelegate { 

, bu UIViewController devraldığı: Burada

#import "ViewController.h" 

@import SLPagingViewSwift; 
@import MBProgressHUD; 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    // Works just fine 
    MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view]; 
    [self.view addSubview:hud]; 
    [hud show:YES]; 

    // Causes Error -- Won't build 
    SLPagingViewSwift *sl = [[SLPagingViewSwift alloc] init]; 
} 

@end 

SLPagingViewSwift beyan ediyor: İşte Projemde ViewController.m var o. Dosyayı sadece bir dosya olarak ayrı olarak eklerseniz, yukarıdaki kod düzgün çalışır. Çalıştığını biliyorum.

tl; dr

nasıl saf Objective-C sınıfında CocoaPods yarattığı saf Swift Framework kullanabilir?

Arıza bulma ve giderme Çoğunlukla çeşitli ithalat çalışıyorum. Elma @import tarzı here

enter image description here

önerir Ama birden diğer çeşitleri çalışıyorlar:

Ben de olmadığını görmek için zaman zaman diğer birkaç Swift kütüphaneleri çalışıyorum
// Compiler Error 
#import <SLPagingViewSwift/SLPagingViewSwift.h> 

// Builds Fine -- Doesn't Work 
#import <SLPagingViewSwift/SLPagingViewSwift-Swift.h> 
#import "SLPagingViewSwift-Swift.h" 

Ben bir şey tıklatırdı.

Bu konuda yardımcı olabilecek Cocoapods konularında hiçbir şey görmüyorum, ayrıca bloglarında/yayınlarında bir şey bulamadım. Ben projeye ayrı olarak eski moda yolu SLPagingViewSwift.swift dosya eklerseniz

Not

, gayet güzel çalışıyor.

+0

Anladığım kadarıyla, Objc'den Swift'e her zaman gidebilirsiniz, ancak Swift'in Objc'de bulunmayan dil özelliklerine sahip olmasından ötürü her zaman başka şekilde değil ... –

+0

@EdgarAroutiounian - Bazı açılardan haklısınız ama bu tür bir sınıfla birlikte, bir ObjC sınıfından miras alındığı için bir problem olmamalı. Ayrıca, sadece dosyayı eklersem, yukarıdaki snippet'im oluşturur ve çalışır. (bkz. güncelleme) – Logan

+0

Hey, soru bana çok yardımcı oldu, ben kakao bakla ile FacebookSDK eklemek çalışıyordu ve derlemek çalışırken hatalar var, "ithalat FacebookSDK" hile yaptı –

cevap

32

Bence hızlı sınıfı açık olarak ilan etmelisiniz, aksi takdirde bir iç sınıf olarak değerlendirilir ve sadece aynı modülde görülebilir ve bu da dosyaları aynı projeye eklemenin nedeni olabilir. Çalışmak, ama bir çerçeve olarak değil. Benim için gerçekleşen diğer şey, çerçevenin, sınıf bildiriminin önüne @objc eklemesi gerekmesidir, böylece nesnel-c sınıflarında görülebilir. Ayrıca, Apple'ın Mix and Match hedefini c nesnesine göre okuyup hızlı bir şekilde dış çerçeveyi içe aktarırken, içe aktardığınız çerçevenin Tanımlar Modülü yapısı ayarının Evet olarak ayarlandığından emin olmanız gerekir. Bu seçeneklerden herhangi birini kontrol ettiniz mi?

+0

Halk bunu yaptı! Bunun neden böyle olduğunu bilmiyorum, ama yaptı. Benim anlayışım halkın varsayılan olduğunu, yanlış olduğumu bildiğim için çok mutluydu. Sanırım bu ödül (3 saat içinde) kazanıyor, tebrikler :) – Logan

+3

Tamam, bunu bir yıldan fazla geç biliyorum ama buna cevap vermek zorunda hissediyorum (çünkü hiç kimse yapmadı). Hızlı varsayılanlar birçok nedenden ötürü dahili (sadece atanan grup tarafından erişilebilir). –

+0

Bir Objective C projesinin içinde hızlı çerçeve kullanarak bir kapsül kullanıyorsanız, sadece #import " -Swift.h" eklemeniz gerekir. Benim durumumda, objektif C projemde Alamofire kullanmam gerekiyordu, bu yüzden işe yaraması için "Alamofire-Swift.h" etiketini kullandım. –

İlgili konular