Eu escrevi uma biblioteca no Swift e não pude importá-la para o meu projeto atual, escrito em Objective-C.
Existem maneiras de importá-lo?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
objective-c
import
swift
Viktor Radchenko
fonte
fonte
Respostas:
Você precisa importar
TargetName-Swift.h
. Observe que é o nome do destino - as outras respostas cometem o erro de usar o nome da classe.Esse arquivo único é um cabeçalho gerado automaticamente que define as interfaces Objective-C para todas as classes Swift no seu projeto que são anotadas
@objc
ou herdadas deNSObject
.Considerações:
Se o nome do seu destino contiver espaços, substitua-os por sublinhados (por exemplo,
My Project
torna-seMy_Project-Swift.h
)Se seu destino for uma estrutura, você precisará importar
<TargetName/TargetName-Swift.h>
Verifique se o seu arquivo Swift é membro do destino
fonte
Instruções do site da Apple:
Revisão:
Você pode importar apenas "ProductName-Swift.h" em arquivos .m.
fonte
NSObject
!!! você não pode simplesmente declarar umclass Blah
rápido e fazê-lo funcionar. precisa serclass Blah : NSObject
Aqui está o que fazer:
Crie um novo projeto no Objective-C
Crie um novo
.swift
arquivoClique no seu arquivo Xcode Project
Clique em Configurações de compilação
Localize a barra de pesquisa e procure o módulo Defines .
Altere o valor para Sim .
Pesquisar nome do módulo do produto .
Mude o valor para o nome do seu projeto.
No delegado do aplicativo, adicione o seguinte:
#import "YourProjectName-Swift.h"
Nota: Sempre que quiser usar seu arquivo Swift, você deve importar a seguinte linha:
#import "YourProjectName-Swift.h"
fonte
Defines module
emBuild settings
queYes
é o que fixa as coisas para mim!YourProjectName
em#import "YourProjectName-Swift.h"
será o nome do projeto a partir do passo 8. útil se o nome do projeto contém caracteres especiais e você não tem certeza de como exatamente você deve formatá-lo.Se você estiver usando Cocoapods e tentando usar um pod Swift em um projeto ObjC, basta fazer o seguinte:
fonte
Vá para criar configurações no arquivo do projeto e procure por "Nome do cabeçalho da interface gerada por Objective-C . O valor dessa propriedade é o nome que você deve incluir.
Se a propriedade "Nome do módulo do produto" (aquela da qual a propriedade acima depende por padrão) variar dependendo de você compilar para teste / depuração / release / etc (como no meu caso), torne essa propriedade independente disso variação, definindo um nome personalizado.
fonte
A importação do
Swift
arquivo para dentroObjective-c
pode causar esse erro, se não funcionarimport
corretamente.NOTA: Você não precisa importar arquivos Swift externamente, basta importar um arquivo que cuide de arquivos swift.
Quando você criou / copiou o arquivo Swift no projeto Objective-C . Teria criado um cabeçalho de ponte automaticamente.
Verifique
Objective-C Generated Interface Header Name
emTargets -> Build Settings
.Com base no exposto, vou importar
KJExpandable-Swift.h
como está.Seu será
TargetName-Swift.h
, OndeTargetName
difere com base no nome do seu projeto ou em outro destino que você possa ter adicionado e executado nele.Como abaixo do meu objetivo
KJExpandable
, éKJExpandable-Swift.h
fonte
Primeiro passo:-
Selecione Alvo do projeto -> Configuração da compilação -> Pesquisa ('Definir') -> Definir valor de atualização do módulo Não para Sim
"Define Module": SIM .
"Sempre incorpore bibliotecas padrão do Swift": SIM .
"Instalar cabeçalho de compatibilidade do Objective-C": SIM .
Segundo passo:-
Adicionar classe de arquivo Swift no arquivo de objetivo C ".h", conforme abaixo
Importar 'ProjectName (nome do seu projeto) -Swift.h' no arquivo Objective C ".m"
fonte
Há uma ressalva se você estiver importando o código Swift para seus arquivos Objective-C dentro da mesma estrutura. Você precisa fazer isso especificando o nome da estrutura e os colchetes angulares:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
aqui está a configuração de compilação "Nome do módulo do produto" (PRODUCT_NAME = MyFramework
).Simplesmente adicionar
#import "MyFramework-Swift.h"
não funcionará. Se você verificar o diretório de produtos criados (antes de#import
adicionar um desses , para ter pelo menos uma compilação bem-sucedida com algum código Swift no destino), ainda deverá ver o arquivoMyFramework-Swift.h
noHeaders
diretóriofonte
Se você tem um projeto criado no Swift 4 e adicionou arquivos Objective-C, faça o seguinte:
Referência: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
fonte
Confira as notas de pré-lançamento sobre Swift e Objective C no mesmo projeto
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75
Você deveria estar importando
fonte
The name of this header is your product module name followed by adding "-Swift.h".
Portanto, não é o nome da classe como você escreveu, mas o nome do seu módulo de produto e que importa a importação de todos os arquivos rápidos, não apenas de um específicoPesquise "Nome do cabeçalho da interface gerada pelo Objective-C" nas Configurações de compilação do destino que você está tentando compilar (digamos que seja
MyApp-Swift.h
) e importe o valor dessa configuração (#import "MyApp-Swift.h"
) no arquivo de origem onde você está tentando acessar suas APIs Swift.O valor padrão para este campo é
$(SWIFT_MODULE_NAME)-Swift.h
. Você pode vê-lo se clicar duas vezes no campo de valor da configuração "Nome do cabeçalho da interface gerada por Objective-C".Além disso, se você tiver traços no nome do módulo (digamos que seja
My-App
),$(SWIFT_MODULE_NAME)
todos os traços serão substituídos por sublinhados. Então você terá que adicionar#import "My_App-Swift.h"
.fonte
Se você deseja usar o arquivo Swift na classe Objective-C , então a partir do Xcode 8 você pode seguir as etapas abaixo:
Se você criou o projeto no Objective-C:
Compile-o e se ele irá gerar um erro de vinculador, como: compilado com a versão mais recente da linguagem Swift (3.0) que os arquivos anteriores (2.0) para a arquitetura x86_64 ou armv 7
Faça mais uma alteração no seu
Construir e executar.
fonte
Tenha cuidado com traços e sublinhados, eles podem ser misturados e o nome do projeto e o nome do destino não serão os mesmos que SWIFT_MODULE_NAME.
fonte
você verá quando você digitar no teclado #import <e depois automaticamente o Xcode o aconselhará.
fonte
Encontre o arquivo .PCH dentro do projeto. e adicione
#import "YourProjectName-Swift.h"
Isto importará os cabeçalhos da classe. Para que você não precise importar para um arquivo específico.fonte