2015-01-17 24 views
49

Tôi đã cố gắng để kiểm tra CocoaPods thiết lập khung mới để có được một số Pods đi và tôi gặp rắc rối khi sử dụng Swift trong dự án Objective-C của tôi.Làm thế nào để nhập và sử dụng Swift Pod Framework trong Objective-C Project

Trước tiên, đây là CocoaPods prerelease 0,35, bạn có thể đọc về cách sử dụng và cài đặt nó here.

Dưới đây là Podfile hiện tại của tôi:

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

platform :ios, '8.0' 

pod 'MBProgressHUD' 
pod 'SLPagingViewSwift' 

MBProgressHUD là một chỉ số quay thông thường, và SLPagingViewSwift là một dự án ngẫu nhiên tôi thấy bằng cách gõ Swift vào tìm kiếm cocoapods. Đây là ViewController.m Trong dự án của tôi:

#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 

Dưới đây là các SLPagingViewSwift khai:

class SLPagingViewSwift: UIViewController, UIScrollViewDelegate { 

Như bạn có thể thấy, nó được thừa hưởng từ UIViewController, vì vậy nó không phải là một vấn đề để chỉ phân bổ nó và khởi tạo nó. Nếu tôi thêm tệp một cách riêng biệt như một tệp, thì mã trên chỉ chạy tốt. Tôi biết nó hoạt động.

tl; dr

Làm thế nào tôi có thể sử dụng một Swift Khung tinh khiết tạo ra bởi CocoaPods trong một lớp học Objective-C tinh khiết?

xử lý sự cố

Chủ yếu là tôi đã cố gắng nhập khẩu khác nhau. Apple khuyến cáo các @import phong cách here

enter image description here

Nhưng tôi đã cố gắng nhiều giống khác:

// Compiler Error 
#import <SLPagingViewSwift/SLPagingViewSwift.h> 

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

Tôi cũng đã cố gắng một vài thư viện Swift khác bất cứ lúc nào để xem nếu tôi có thể làm bất cứ điều gì nhấp chuột.

Tôi không thấy bất kỳ điều gì về các vấn đề của Cocoapod có thể giúp ích cho việc này, tôi cũng không tìm thấy bất kỳ nội dung nào trong blog/nội dung phát hành của họ.

Note

Nếu tôi thêm các tập tin SLPagingViewSwift.swift riêng cho dự án theo cách cũ thời, nó hoạt động tốt.

+0

Từ những gì tôi hiểu, bạn luôn có thể chuyển từ Objc sang Swift, nhưng không phải luôn luôn theo cách khác vì Swift có các tính năng ngôn ngữ đơn giản không tồn tại trong Objc ... –

+0

@EdgarAroutiounian - Bạn đúng trong một số khía cạnh , nhưng với loại lớp này, nó không phải là một vấn đề bởi vì nó kế thừa từ một lớp ObjC. Ngoài ra, nếu tôi chỉ thêm tệp, đoạn mã trên của tôi sẽ được tạo và chạy tốt. (xem cập nhật) – Logan

+0

Câu hỏi của bạn thực sự đã giúp tôi rất nhiều, tôi đã cố gắng thêm FacebookSDK với cụm ca cao và gặp lỗi khi cố biên dịch, "nhập khẩu FacebookSDK" đã thực hiện mẹo –

Trả lời

32

Tôi nghĩ bạn phải khai báo lớp nhanh như là công khai, nếu không nó được coi là lớp nội bộ và chỉ có thể được nhìn thấy trong cùng một mô-đun, và điều này có thể là lý do tại sao thêm nó vào cùng một dự án như tệp công việc, nhưng như một khung công tác thì không. Điều khác xảy ra với tôi là khung có thể cần phải thêm @objc vào trước khai báo lớp để nó có thể được nhìn thấy trong các lớp khách quan-c. Ngoài ra đọc hướng dẫn của Apple về Mix and Match giữa mục tiêu c và nhanh chóng, nó nói rằng khi bạn nhập khung bên ngoài, bạn cần đảm bảo cài đặt Bản dựng mô đun xác định cho khuôn khổ bạn đang nhập được đặt thành Có. Bạn đã kiểm tra với bất kỳ tùy chọn nào trong số đó chưa?

+0

Công cộng đã làm được! Không biết tại sao phải như vậy, nhưng nó đã làm. Đó là sự hiểu biết của tôi rằng công chúng là mặc định, vui mừng khi biết tôi sai. Tôi đoán rằng sẽ thắng bạn tiền thưởng (trong 3 giờ), congrats :) – Logan

+3

Ok, tôi biết điều này hơn một năm muộn, nhưng tôi cảm thấy bắt buộc phải trả lời này (vì không ai khác đã làm). Swift mặc định là nội bộ (chỉ có thể truy cập bởi nhóm được gán) vì nhiều lý do. –

+0

Nếu sử dụng một nhóm bằng cách sử dụng khung công tác nhanh bên trong một dự án Objective C, bạn chỉ cần thêm #import " -Swift.h". Trong trường hợp của tôi, tôi cần sử dụng Alamofire trong dự án C mục tiêu của mình, vì vậy tôi đã sử dụng #import "Alamofire-Swift.h" để làm cho nó hoạt động .. –

Các vấn đề liên quan