Я написал библиотеку на 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. Обратите внимание, что это целевое имя - другие ответы делают ошибку при использовании имени класса.
Этот единственный файл является автоматически сгенерированным заголовком, который определяет интерфейсы Objective C для всех классов Swift в вашем проекте, которые либо аннотированы, @objcлибо наследуются от них NSObject.
Соображения:
Если ваше целевое имя содержит пробелы, замените их подчеркиванием (например, My Projectстановится My_Project-Swift.h)
Если ваша цель - фреймворк, вам нужно импортировать <TargetName/TargetName-Swift.h>
Убедитесь, что ваш файл Swift является членом цели
Инструкции с сайта Apple:
Чтобы импортировать код Swift в Objective-C из того же фреймворка
В разделе параметров сборки , в упаковке , убедитесь , что Определяет модуль настройка для этой цели рамочной установлена в Yes . Импортируйте код Swift из этой целевой платформы в любой файл Objective-C .m в этой целевой структуре, используя этот синтаксис и подставляя соответствующие имена:
#import "ProductName-Swift.h"
Редакция:
Вы можете импортировать «ProductName-Swift.h» только в файлы .m.
Файлы Swift в вашей цели будут видны в файлах Objective-C .m, содержащих этот оператор импорта.
Чтобы избежать циклических ссылок, не импортируйте Swift в заголовочный файл Objective-C. Вместо этого вы можете заранее объявить класс Swift, чтобы использовать его в заголовке Objective-C. Обратите внимание, что вы не можете создать подкласс класса Swift в Objective-C.

NSObject!!! Вы не можете просто объявить class Blah в быстром и заставить его работать. это должно бытьclass Blah : NSObject
Вот что нужно сделать:
Создать новый проект в Objective-C
Создать новый .swiftфайл
Нажмите на свой файл проекта XCode
Нажмите на настройки сборки
Найдите панель поиска и найдите модуль Defines .
Измените значение на Да .
Поиск по названию модуля продукта .
Измените значение на имя вашего проекта.
В App делегат добавьте следующее: #import "YourProjectName-Swift.h"
Примечание: всякий раз, когда вы хотите использовать свой файл Swift, вы должны импортировать следующую строку:
#import "YourProjectName-Swift.h"
Defines moduleв Build settingsк Yesто , что фиксированные вещи для меня!
YourProjectNameв #import "YourProjectName-Swift.h"будет именем проекта из шага 8. Полезно, если имя вашего проекта содержит специальные символы, и вы не уверены, как именно вы должны его отформатировать.
Если вы используете Cocoapods и пытаетесь использовать модуль Swift в проекте ObjC, вы можете просто сделать следующее:
@import <FrameworkName>;
Перейдите к настройкам сборки в файле проекта и найдите «Имя заголовка интерфейса, созданного Objective-C» . Значением этого свойства является имя, которое вы должны включить.
Если ваше свойство «Product Module Name» (от которого зависит указанное выше свойство по умолчанию) зависит от того, компилируете ли вы для test / debug / release / etc (как это происходит в моем случае), то сделайте это свойство независимым от этого изменение путем установки собственного имени.
Импорт Swiftфайла внутри Objective-cможет вызвать эту ошибку, если это не importправильно.
ПРИМЕЧАНИЕ. Вам не нужно импортировать файлы Swift извне, вам просто нужно импортировать один файл, который заботится о файлах Swift.
Когда вы создали / скопировали файл Swift внутри проекта Objective-C . Это автоматически создало бы соединительный заголовок.
Проверьте Objective-C Generated Interface Header Nameв Targets -> Build Settings.
Исходя из вышеизложенного, я буду импортировать KJExpandable-Swift.hкак есть.
Ваш будет TargetName-Swift.h, где TargetNameотличается в зависимости от имени вашего проекта или другой цели, которую вы могли бы добавить и запустить на нем.
Первый шаг:-
Выберите Project Target -> Build Setting -> Search («Определить») -> Define Module update value От Нет до Да.
«Определяет модуль»: ДА .
«Всегда встраивать стандартные библиотеки Swift»: ДА .
«Установить заголовок совместимости Objective-C»: ДА .
Второй шаг:-
Добавьте класс файла Swift в файл Objective C ".h", как показано ниже
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
Импортируйте имя_проекта (имя вашего проекта) -Swift.h в файле цели. ".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"
The name of this header is your product module name followed by adding "-Swift.h".То есть, это не имя класса, как вы написали, а имя модуля вашего продукта, и он заботится об импорте всех быстрых файлов, а не только определенного
Найдите «Имя заголовка сгенерированного интерфейса Objective-C» в настройках сборки цели, которую вы пытаетесь построить (скажем, так MyApp-Swift.h), и импортируйте значение этого параметра (#import "MyApp-Swift.h" ) в исходный файл, к которому вы пытаетесь получить доступ. ваши Swift API.
Значение по умолчанию для этого поля $(SWIFT_MODULE_NAME)-Swift.h . Это можно увидеть, если дважды щелкнуть в поле значения параметра «Имя заголовка сгенерированного интерфейса Objective-C».
Кроме того, если у вас есть тире в имени вашего модуля (скажем так 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 <и после автоматически 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