13 ответов:
вам нужно импортировать
TargetName-Swift.h. Обратите внимание, что это имя цели - другие ответы делают ошибку, используя имя класса.этот единственный файл является автогенерированным заголовком, который определяет интерфейсы Objective-C для всех классов Swift в вашем проекте, которые либо аннотируются с помощью
@objcили наследовать отNSObject.вопросы:
если ваше имя цели содержит пробелы, замените их подчеркиванием (например,
My ProjectбудетMy_Project-Swift.h)если ваша цель-фреймворк, вам нужно импортировать
<TargetName/TargetName-Swift.h>убедитесь, что ваш Swift файл является членом целевой
инструкции с сайта Apple:
импортировать Swift код в Objective-C из той же структуры
под Параметры Построения, в упаковка убедитесь, что Определяет Модуль параметр для этой цели фреймворка имеет значение да. Импорт SWIFT-код из этой структуры цели в какой-либо объективной-С.файл м внутри цель фреймворка, используя этот синтаксис и подставляя соответствующий имена:
#import " ProductName-Swift.h"
изменения:
вы можете только импортировать " ProductName-Swift.h" in .m-файл.
файлы Swift в вашей цели будут видны в Objective-C .m-файл содержащий этот оператор импорта.
чтобы избежать циклических ссылок, не импортируйте Swift в Objective-C заголовочный файл. Вместо этого вы можете переслать объявить Свифт класса, чтобы использовать его в заголовке Objective-C. Обратите внимание, что вы не можете подкласс класса Swift в объективе-С.
вот что нужно делать:
создать новый проект в Objective-C
создать новый
- появится всплывающее окно и спрашиваете "вы хотите настроить заголовок моста Objective-C".
- выбрать да.
нажать на Проект Xcode файл
нажать на кнопку Настройки Сборки
найти поиска и ищите Определяет Модуль.
изменить значение на да.
Поиск Имя Модуля Продукта.
изменить значение на имя вашего проекта.
в делегате приложения добавьте следующее :
#import "YourProjectName-Swift.h"
Примечание: всякий раз, когда вы хотите использовать свой Swift-файл, вы должны импортировать следующую строку :
#import "YourProjectName-Swift.h"
перейдите к настройкам сборки в файле проекта и найдите " Objective-C Сгенерированное Имя Заголовка Интерфейса. значение этого свойства-это имя, которое вы должны включить.
Если ваше свойство "имя модуля продукта" (то, от которого по умолчанию зависит указанное выше свойство) зависит от того, компилируете ли вы для test/debug/release/etc (как в моем случае), затем сделайте это свойство независимым от этого варианта, установив пользовательский имя.
импорт внутри
Objective-cможет вызвать эту ошибку, если это неimportправильно.Примечание: вам не нужно импортировать Swift файлы извне, вы просто должны импортировать один файл, который заботится о swift файлов.
когда вы создан / скопирован Swift файл внутри цель-C проект. Он бы создал заголовок моста автоматически.
Регистрация
Objective-C Generated Interface Header NameatTargets -> 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 @endImport ' ProjectName (Ваше Имя Проекта)-Swift.h ' в объективе с ".файл м"
//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 Generated Interface Header Name" в настройках сборки цели, которую вы пытаетесь построить (допустим, это
MyApp-Swift.h), и импортировать значение этого параметра (#import "MyApp-Swift.h") в исходном файле, где вы пытаетесь получить доступ к своим API Swift.значение по умолчанию для этого поля является
$(SWIFT_MODULE_NAME)-Swift.h. Вы можете увидеть его, если дважды щелкните в поле значение параметра "Objective-C Generated Interface Header Name".кроме того, если у вас есть тире в имени вашего модуля (допустим, это
My-App), а затем в$(SWIFT_MODULE_NAME)все тире будут заменены подчеркиванием. Так что вам придется добавить#import "My_App-Swift.h".
Если вы хотите использовать Swift на С класс, поэтому с Xcode 8 и далее вы можете выполнить следующие шаги:
Если вы создали проект в Objective-C:
- создать новый Swift файл
- Xcode будет автоматически запрашивать Bridge-Header file
- создать его
- Import " Имяпроекта-Swift.h " в вашем контроллере Objective-C (импорт в реализации не в интерфейс) (если ваш проект имеет пространство между именем, поэтому используйте подчеркивание "Project_Name-Swift.h")
- вы сможете получить доступ к своему классу Objective-C в Swift.
скомпилируйте его, и если он будет генерировать ошибку компоновщика, например: скомпилирован с более новой версией языка Swift (3.0), чем предыдущие файлы (2.0) для архитектуры x86_64 или armv 7
сделать еще одно изменение в свой
- Xcode - > Project - > Target - > Build Settings -> Use Legacy Swift Language Version - > Yes
построить и запустить.
найти .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/





Comments