Jak używać Objective-C CocoaPods w Swift Project

84

Czy istnieje sposób, w jaki mogę użyć CocoaPod napisanego w Objective-C w moim projekcie Swift przy użyciu Swift?

Czy po prostu tworzę nagłówek mostkujący? A jeśli tak, czy mogę uzyskać dostęp do obiektów, klas i pól zdefiniowanych przez biblioteki w CocoaPod w Swift?

shaydawg
źródło

Odpowiedzi:

170

Podstawowa odpowiedź na Twoje pytanie brzmi: Tak, możesz użyć kodu Objective-C zbudowanego za pomocą CocoaPods.

Ważniejsze pytanie brzmi: „Jak korzystać z takich bibliotek?”
Odpowiedź na to pytanie zależy od use_frameworks!flagi w twoim Podfile:
Wyobraźmy sobie, że chcesz użyć kapsuły Objective-C z nazwą CoolObjectiveCLib.

Jeśli twój plik pod używa use_frameworks!flagi:

// Podfile
use_frameworks!
pod 'CoolObjectiveCLib'

Wtedy nie musisz dodawać żadnych plików nagłówkowych mostka.
Wszystko, czego potrzebujesz, to struktura importu w pliku źródłowym Swift:

// MyClass.swift
import CoolObjectiveCLib

Teraz możesz używać wszystkich klas przedstawionych w lib.

Jeśli twój plik pod nie używa use_frameworks!flagi:

// Podfile
pod 'CoolObjectiveCLib'

Następnie musisz utworzyć plik nagłówka mostkowania i zaimportować tam wszystkie niezbędne nagłówki Objective-C:

// MyApp-Bridging-Header
#import "CoolObjectiveCLib.h"

Teraz możesz używać wszystkich klas zdefiniowanych w importowanych nagłówkach.

Vlad Papko
źródło
jak uzyskać dostęp do szybkich klas z plików pod .m (w przypadku, gdy chcę dostosować te pody)?
JAHelia
1
Miałem use_frameworks odkomentowany w podfile mojego szybkiego projektu i chciałem użyć Toast pod, który w rzeczywistości jest kategorią Objective-C. Po prostu pisząc import UIView + Toast dał mi błąd kompilacji: kolejne instrukcje w wierszu muszą być oddzielone znakiem „;”
Chanchal Raj
@ChanchalRaj to UIView+Toastnazwa dla Twojego kapsuły? Jeśli nie, spróbuj użyć struktury importu, której nazwa pasuje do nazwy twojego poda.
Vlad Papko,
1
Użyłem tego samego kodu, aby użyć kodu objc do pliku swift, ale daje mi to błąd nie ma takiego modułu "POD NAME", czy muszę ustawić inną flagę
Prashant Tukadiya
4
Jeśli masz problemy z use_frameworks! , może to być spowodowane tym, że instrukcje importu nie są zapisane w poprawnym formacie. np. jeśli plik podFile zawiera pod 'iOS-Echarts', import będzie przebiegał w następujący sposób: Plik Swift : Plik import iOS_Echarts Objective-C :#import <iOS_Echarts/iOS-Echarts.h>
Kushal Ashok
2

W podFile użyj flagi use_frameworks! Wewnątrz Xcode w Podstrukturze folderów w zależności należy dodać xxxxxxx-umbrella.hpliki pomocnicze.

W twoim {PROJECT_NAME}-Bridging-Header.hużyciu:

#import "xxxxxxx/xxxxxxx-umbrella.h"

Mi to pasuje.

RodolfoNeto
źródło
0

Potrzebujesz tylko nagłówka mostkującego i zaimportuj tam to, czego potrzebujesz.

Lucian Boboc
źródło
0

ORAZ nie zapomnij dodać nazwy pliku nagłówka Bridging do elementu Target -> Build Settings -> Objective-C Bridging Header

o0sea0o
źródło