Я написал библиотеку на Swift и не смог импортировать ее в свой текущий проект, написанный на Objective-C.
Есть ли способы его импортировать?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
Я написал библиотеку на Swift и не смог импортировать ее в свой текущий проект, написанный на Objective-C.
Есть ли способы его импортировать?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
Вам необходимо импортировать TargetName-Swift.h
. Обратите внимание, что это целевое имя - другие ответы делают ошибку при использовании имени класса.
Этот единственный файл является @objc
заголовком, который определяет интерфейсы Objective C для всех классов Swift в вашем проекте, которые либо аннотированы @objc
либо наследуются от NSObject
.
Соображения:
Если ваше целевое имя содержит пробелы, замените их подчеркиванием (например, My Project
становится My_Project-Swift.h
)
Если ваша цель - фреймворк, вам нужно импортировать <TargetName/TargetName-Swift.h>
Убедитесь, что ваш файл Swift является членом цели
Инструкции с веб-сайта Apple:
Чтобы импортировать код Swift в Objective-C из той же структуры
В разделе Настройки сборки, в Упаковка убедитесь, что Определяет модульдля этой целевой рамки установлено значение Да. Импортировать код Swift из этой рамки в любой файл Objective-C.m внутри с использованием этого синтаксиса и подстановки соответствующего Имена:
#import "ProductName-Swift.h"
Revision:
Вы можете импортировать только "ProductName-Swift.h" в .m файлы.
Файлы Swift в вашей цели будут видны в файлах Objective-C.m содержащий этот оператор импорта.
Чтобы избежать циклических ссылок, не импортируйте Swift в Objective-Cфайл заголовка. Вместо этого вы можете перенаправить объявление класса Swift, чтобы использовать его в заголовке Objective-C. Обратите внимание, что вы не можете подклассифицировать класс Swift в Objective-C.
Вот что делать:
Создать новый проект в Objective-C
Создать новый файл .swift
Нажмите на свой файл проекта XCode
Нажмите на настройки сборки
Найдите панель поиска и найдите модуль Defines.
Измените значение на Да.
Поиск по названию модуля продукта.
Измените значение на имя вашего проекта.
В делегат приложения добавьте следующее: #import "YourProjectName-Swift.h"
Примечание: всякий раз, когда вы хотите использовать свой файл Swift, вы должны импортировать следующую строку:
#import "YourProjectName-Swift.h"
Если вы используете Cocoapods и пытаетесь использовать Swift-модуль в проекте ObjC, вы можете просто сделать следующее:
@import <FrameworkName>;
Перейдите к настройкам сборки в файле проекта и найдите "Objective-C Имя заголовка сгенерированного интерфейса. Значение этого свойства - это имя, которое вы должны включить.
Если ваше свойство "Product Module Name" (указанное выше свойство зависит от значения по умолчанию) изменяется в зависимости от того, компилируете ли вы для test/debug/release/etc (как в моем случае), тогда сделайте это свойство независимо от этого изменения, установив собственное имя.
Импортирование файла Swift
внутри Objective-c
может привести к этой ошибке, если она не соответствует import
.
ПРИМЕЧАНИЕ. Вам не нужно импортировать файлы Swift извне, вам просто нужно импортировать один файл, который будет обрабатывать быстрые файлы.
Когда вы Создаете/Скопировали файл Swift внутри Objective-C проекта. Это создало бы заголовок моста автоматически.
Проверьте Objective-C Generated Interface Header Name
на Targets -> Build Settings
.
Основываясь на выше, я импортирую KJExpandable-Swift.h
как есть.
Ваш будет TargetName-Swift.h
, где TargetName
отличается в зависимости от вашего имени проекта или другой цели, которую вы могли бы добавить и запустить на нем.
Как ниже моя цель KJExpandable
, так что KJExpandable-Swift.h
Первый шаг: -
Выберите цель проекта → Настройка сборки → Поиск ( "Определить" ) → Определить модуль Обновить значение Нет до Да
"Определяет модуль": ДА.
"Всегда вставлять быстрые стандартные библиотеки": ДА.
"Установить Objective-C Заголовок совместимости": ДА.
Второй шаг: -
Добавить класс Swift в Objective C ".h" Файл ниже
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
Импортировать 'имя_проекта (ваше имя проекта) -Swift.h' в Objective C ".m" файл
//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 Module Name" (PRODUCT_NAME = MyFramework
).
Просто добавление #import "MyFramework-Swift.h"
не будет работать. Если вы проверите каталог встроенных продуктов (до добавления такого #import
, так что у вас была хотя бы одна успешная сборка с некоторым кодом Swift в целевой), вы все равно должны увидеть файл MyFramework-Swift.h
в Headers
.
Если у вас есть проект, созданный в Swift 4, а затем добавленные файлы Objective-C, сделайте это следующим образом:
@objcMembers
public class MyModel: NSObject {
var someFlag = false
func doSomething() {
print("doing something")
}
}
Ссылка: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
Оформить предварительные выпуски о Swift и Objective C в том же проекте
Вам следует импортировать
#import "SCLAlertView-Swift.h"
Найдите "Objective-C Имя заголовка сгенерированного интерфейса" в настройках сборки целевого объекта, который вы пытаетесь построить (скажем, MyApp-Swift.h
), и импортируйте значение этого параметра (#import "MyApp-Swift.h"
) в исходном файле, где вы пытаетесь получить доступ к своим Swift API.
Значение по умолчанию для этого поля $(SWIFT_MODULE_NAME)-Swift.h
. Вы можете увидеть это, если вы дважды щелкните в поле значений параметра "Objective-C Generated Interface Header Name".
Кроме того, если у вас есть тире в имени вашего модуля (скажем, My-App
), то в $(SWIFT_MODULE_NAME)
все тире будут заменены символами подчеркивания. Итак, вам нужно добавить #import "My_App-Swift.h"
.
Если вы хотите использовать Swift файл в классе Objective-C, поэтому с Xcode 8 и далее вы можете выполнить следующие шаги:
Если вы создали проект в Objective-C:
Скомпилируйте его, и если он будет генерировать ошибку компоновщика, например: скомпилированную с более новой версией языка Swift (3.0), чем предыдущие файлы (2.0) для архитектуры x86_64 или armv 7
Сделайте еще одно изменение в
Сборка и запуск.
Будьте осторожны с черточками и подчеркиванием, они могут быть перепутаны, и имя вашего проекта и имя цели не будут совпадать с SWIFT_MODULE_NAME.
#import <TargetName-Swift.h>
вы увидите при входе с клавиатуры #import & lt; и после автоматически Xcode посоветует вам.
Найдите файл .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