Как импортировать код Swift в Objective-C?
Я написал библиотеку в Swift, и я не смог импортировать ее в свой текущий проект, написанный в Objective-C.
есть ли способы импортировать его?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
13 ответов
вам нужно импортировать TargetName-Swift.h
. Обратите внимание, что это целевое имя - другие ответы делают ошибку, используя имя класса.
этот единственный файл является автогенерированным заголовком, который определяет интерфейсы Objective-C для всех классов Swift в вашем проекте, которые либо аннотируются @objc
или наследовать от NSObject
.
вопросы:
если ваше целевое имя содержит пробелы, замените их символами подчеркивания (например,
My Project
будетMy_Project-Swift.h
)если ваша цель является фреймворком, вам нужно импортировать
<TargetName/TargetName-Swift.h>
убедитесь, что ваш файл Swift является членом целевого
инструкции с веб-сайта Apple:
импортировать Swift-код в Objective-C из той же структуры
под Параметры Построения, в упаковка убедитесь, что Определяет Модуль для этого целевого объекта framework задано значение да. Импорт кода Swift из этой Рамочной цели в любую цель-C .файл м внутри целевой объект framework, использующий этот синтаксис и заменяющий соответствующий имена:
#импорт " Имя_продукта-Swift.h"
изменения:
вы можете импортировать только " ProductName-Swift.h" in .m-файл.
файлы Swift в вашей цели будут видны в Objective-C.m-файл содержащий этот оператор import.
чтобы избежать циклических ссылок, не импортируйте Swift в Objective-C заголовочный файл. Вместо этого вы можете переслать объявите класс Swift для его использования в заголовке Objective-C. Обратите внимание, что вы не можете подкласс Swift класса в объективе-С.--1-->
вот что нужно делать:
создайте новый проект в Objective-C
-
создать новый
- появится всплывающее окно и спрашиваете "вы хотите настроить заголовок моста Objective-C".
- выбрать да.
нажать на Проект Xcode файл
нажать на кнопку Настройки Сборки
найти поиска и ищите Определяет Модуль.
изменить значение на да.
Поиск Название Модуля Продукта.
изменить значение на имя вашего проекта.
в делегате приложения добавьте следующее :
#import "YourProjectName-Swift.h"
Примечание: всякий раз, когда вы хотите использовать свой файл Swift, вы должны импортировать следующую строку:
#import "YourProjectName-Swift.h"
Если вы используете Cocoapods и пытаетесь использовать Swift pod в проекте ObjC, вы можете просто сделать следующее:
@import <FrameworkName>;
перейдите к настройкам сборки в файле проекта и найдите " Objective-C Сгенерированное Имя Заголовка Интерфейса. значение этого свойства-это имя, которое вы должны включить.
Если ваше свойство " имя модуля продукта "(то, от которого зависит вышеуказанное свойство по умолчанию) изменяется в зависимости от того, компилируете ли вы для test / debug/release / etc (как в моем случае), то сделайте это свойство независимым от этого изменения, установив пользовательский имя.
импорт внутри Objective-c
может вызвать эту ошибку, если она не import
правильно.
Примечание: вам не нужно импортировать файлы Swift извне, вам просто нужно импортировать один файл, который заботится о файлах swift.
когда вы создан / скопирован Swift файл внутри цель-C проект. Это автоматически создало бы заголовок моста.
Регистрация Objective-C Generated Interface Header Name
at Targets -> Build Settings
.
на основе выше, я буду импортировать KJExpandable-Swift.h
как она есть.
ваши будут TargetName-Swift.h
, где TargetName
отличается в зависимости от вашего имени проекта или другой цели, которую вы могли бы добавить и запустить на нем.
как ниже моей цели KJExpandable
, так что KJExpandable-Swift.h
Первый Шаг:-
Выберите Цель Проекта - > Настройка Сборки - > Поиск ('Define') ->Определить Модуль обновить значение нет до Да
"Определяет Модуль": Да.
"Всегда Вставлять Стандартные Библиотеки Swift":Да.
" Установите Заголовок Совместимости Objective-C" : Да.
Второй Этап:-
добавить класс Swift file в Objective C".H-файл", как показано ниже
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
Import ' ProjectName (Имя Вашего Проекта)-Swift.h 'in Objective C".файл м"
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
есть одно предостережение, если вы импортируете Swift-код в свои файлы Objective-C в том же основы. Вы должны сделать это, указав имя фреймворка и угловые скобки:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
вот параметр сборки "имя модуля продукта" (PRODUCT_NAME = MyFramework
).
просто добавив #import "MyFramework-Swift.h"
не будет работать. Если вы проверите встроенный каталог продуктов (перед таким #import
добавляется, поэтому у вас была хотя бы одна успешная сборка с некоторые SWIFT-код цели), то вы все равно должны увидеть файл MyFramework-Swift.h
на .
проверка предварительных заметок о Swift и Objective C в том же проекте
вы должны импортировать
#import "SCLAlertView-Swift.h"
искать "Objective-C Сгенерированное Имя Заголовка Интерфейса" в настройках сборки цели, которую вы пытаетесь построить (скажем, это MyApp-Swift.h
) и импортируйте значение этого параметра (#import "MyApp-Swift.h"
) в исходном файле, где вы пытаетесь получить доступ к своим API Swift.
значение по умолчанию для этого поля является $(SWIFT_MODULE_NAME)-Swift.h
. Вы можете увидеть его, если дважды щелкните в поле значение параметра "имя заголовка интерфейса, сгенерированного Objective-C.".
кроме того, если у вас есть тире в имени вашего модуля (скажем, это My-App
), а затем в $(SWIFT_MODULE_NAME)
все тире будут заменены подчеркиваниями. Так что вам придется добавить #import "My_App-Swift.h"
.
Если вы хотите использовать Swift на С класс, поэтому с Xcode 8 и далее вы можете выполнить следующие шаги:
Если вы создали проект в Objective-C:
- создать новый файл Swift
- Xcode будет автоматически запрашивать Bridge-Header file
- создать его
- Импорт " Имяпроекта-Swift.h " в контроллере Objective-C (импорт в реализации не в интерфейс) (если ваш проект имеет пространство между именем, поэтому используйте подчеркивание " имя_проекта-Swift.h")
- вы сможете получить доступ к классу Objective-C в Swift.
скомпилируйте его, и если он будет генерировать ошибку компоновщика, например: скомпилирован с более новой версией Swift language (3.0), чем предыдущие файлы (2.0) для архитектуры x86_64 или armv 7
сделать еще одно изменение в свой
- Xcode - > Проект - > Цель - > Настройки Сборки - > Использовать Наследие Swift Языковая Версия - > Да
сборка и запуск.
найти .PCH файл внутри проекта. а затем добавить #import "YourProjectName-Swift.h"
это импортирует заголовки классов. Так что вам не нужно импортировать в конкретный файл.
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "YourProjectName-Swift.h"
#endif
если у вас есть проект, созданный в Swift 4, а затем добавлены файлы Objective C, выполните следующие действия
@objcMembers
public class MyModel: NSObject {
var someFlag = false // @objc
func doSomething() { // @objc
print("doing something")
}
}
ссылка https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/