Я написал библиотеку на Swift и не смог импортировать ее в свой текущий проект, написанный на Objective-C.
Есть ли способы его импортировать?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
objective-c
import
swift
Виктор Радченко
источник
источник
Ответы:
Вам нужно импортировать
TargetName-Swift.h
. Обратите внимание, что это целевое имя - другие ответы делают ошибку при использовании имени класса.Этот единственный файл является автоматически сгенерированным заголовком, который определяет интерфейсы Objective C для всех классов Swift в вашем проекте, которые либо аннотированы,
@objc
либо наследуются от нихNSObject
.Соображения:
Если ваше целевое имя содержит пробелы, замените их подчеркиванием (например,
My Project
становитсяMy_Project-Swift.h
)Если ваша цель - фреймворк, вам нужно импортировать
<TargetName/TargetName-Swift.h>
Убедитесь, что ваш файл Swift является членом цели
источник
Инструкции с сайта Apple:
Редакция:
Вы можете импортировать «ProductName-Swift.h» только в файлы .m.
источник
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, вы можете просто сделать следующее:
источник
Перейдите к настройкам сборки в файле проекта и найдите «Имя заголовка интерфейса, созданного 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
отличается в зависимости от имени вашего проекта или другой цели, которую вы могли бы добавить и запустить на нем.Как ниже моя цель
KJExpandable
, так этоKJExpandable-Swift.h
источник
Первый шаг:-
Выберите Project Target -> Build Setting -> Search («Определить») -> Define Module update value От Нет до Да.
«Определяет модуль»: ДА .
«Всегда встраивать стандартные библиотеки Swift»: ДА .
«Установить заголовок совместимости Objective-C»: ДА .
Второй шаг:-
Добавьте класс файла Swift в файл Objective C ".h", как показано ниже
Импортируйте имя_проекта (имя вашего проекта) -Swift.h в файле цели. ".M"
источник
Есть одно предостережение, если вы импортируете код 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, сделайте это следующим образом:
Ссылка: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
источник
Просмотрите предварительные заметки о Swift и Objective C в том же проекте
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75
Вы должны импортировать
источник
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 <и после автоматически Xcode сообщит вам об этом.
источник
Найдите файл .PCH внутри проекта. и затем добавьте
#import "YourProjectName-Swift.h"
Это будет импортировать заголовки классов. Так что вам не нужно импортировать в определенный файл.источник