Как использовать Objective-C CocoaPods в проекте Swift

84

Есть ли способ использовать CocoaPod, написанный на Objective-C, в моем проекте Swift с помощью swift?

Я просто сделаю переходной заголовок? И если да, могу ли я получить доступ к объектам, классам и полям, определенным библиотеками в CocoaPod в Swift?

Shaydawg
источник

Ответы:

170

Основной ответ на ваш вопрос: да, вы можете использовать код objective-c, созданный с помощью CocoaPods.

Более важный вопрос: «Как пользоваться такими библиотеками?»
Ответ на этот вопрос зависит от use_frameworks!флага в вашем Podfile:
Предположим, вы хотите использовать модуль Objective-C с именем CoolObjectiveCLib.

Если в вашем pod-файле используется use_frameworks!флаг:

// Podfile
use_frameworks!
pod 'CoolObjectiveCLib'

Тогда вам не нужно добавлять файлы заголовков моста.
Все, что вам нужно, это импорт фреймворка в исходный файл Swift:

// MyClass.swift
import CoolObjectiveCLib

Теперь вы можете использовать все классы, представленные в lib.

Если ваш pod-файл не использует use_frameworks!флаг:

// Podfile
pod 'CoolObjectiveCLib'

Затем вам нужно создать файл заголовка моста и импортировать туда все необходимые заголовки Objective-C:

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

Теперь вы можете использовать все классы, определенные в импортированных заголовках.

Влад Папко
источник
как получить доступ к быстрым классам из файлов pod .m (если я хочу настроить эти модули)?
JAHelia
1
У меня был раскомментированный use_frameworks в подфиле моего быстрого проекта, и я хотел использовать модуль Toast, который на самом деле является категорией objective-c. Просто написав import, UIView + Toast дал мне ошибку компиляции: последовательные операторы в строке должны быть разделены ';'
Chanchal Raj
@ChanchalRaj - это UIView+Toastназвание вашей капсулы? Если нет, попробуйте использовать структуру импорта, имя которой совпадает с именем вашего модуля.
Влад Папко
1
Я использовал тот же код, чтобы использовать код objc для быстрого файла, но он дает мне ошибку: нет такого модуля «POD NAME». Нужно ли мне устанавливать какой-либо другой флаг
Прашант Тукадия
4
Если у вас возникли проблемы с use_frameworks! , это может быть потому, что операторы импорта написаны в неправильном формате. например, если podFile содержит pod 'iOS-Echarts', то импорт будет происходить следующим образом: Файл Swift : Файл import iOS_Echarts Objective-C :#import <iOS_Echarts/iOS-Echarts.h>
Kushal Ashok
2

В podFile используйте флаг use_frameworks! Внутри Xcode в Podструктуре папок в зависимости вы добавляете xxxxxxx-umbrella.hфайлы поддержки.

В вашем {PROJECT_NAME}-Bridging-Header.hиспользовании:

#import "xxxxxxx/xxxxxxx-umbrella.h"

Меня устраивает.

Родольфо Нето
источник
0

Вам просто нужен заголовок моста и импортируйте туда то, что вам нужно.

Люсьен Бобок
источник
0

И не забудьте добавить имя файла заголовка моста в Target -> Настройки сборки -> Заголовок моста Objective-C

o0sea0o
источник