Napisałem bibliotekę w Swift i nie byłem w stanie zaimportować jej do mojego obecnego projektu, napisanego w Objective-C.
Czy są jakieś sposoby na jego zaimportowanie?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
objective-c
import
swift
Wiktor Radczenko
źródło
źródło
Odpowiedzi:
Musisz zaimportować
TargetName-Swift.h
. Zauważ, że jest to nazwa docelowa - inne odpowiedzi popełniają błąd przy użyciu nazwy klasy.Ten pojedynczy plik jest automatycznie generowanym nagłówkiem, który definiuje interfejsy Objective-C dla wszystkich klas Swift w twoim projekcie, które są opatrzone adnotacjami
@objc
lub dziedzicząNSObject
.Uwagi:
Jeśli nazwa docelowa zawiera spacje, zamień je na podkreślenia (np.
My Project
Staje sięMy_Project-Swift.h
)Jeśli Twoim celem jest struktura, musisz zaimportować
<TargetName/TargetName-Swift.h>
Upewnij się, że plik Swift jest członkiem elementu docelowego
źródło
Instrukcje ze strony Apple:
Rewizja:
Plik „ProductName-Swift.h” można importować tylko w plikach .m.
źródło
NSObject
!!! nie możesz po prostu ogłosićclass Blah
szybko i sprawić, by działało. to musi byćclass Blah : NSObject
Oto co robić:
Utwórz nowy projekt w Objective-C
Utwórz nowy
.swift
plikKliknij plik projektu Xcode
Kliknij Ustawienia kompilacji
Znajdź pasek wyszukiwania i wyszukaj moduł Definiuje .
Zmień wartość na Tak .
Wyszukaj nazwę modułu produktu .
Zmień wartość na nazwę swojego projektu.
W aplikacji Deleguj dodaj następujące elementy:
#import "YourProjectName-Swift.h"
Uwaga: Ilekroć chcesz użyć pliku Swift, musisz zaimportować następujący wiersz:
#import "YourProjectName-Swift.h"
źródło
Defines module
inBuild settings
naYes
to, co naprawiło dla mnie rzeczy!YourProjectName
in#import "YourProjectName-Swift.h"
będzie nazwą projektu z kroku 8. Przydatne, jeśli nazwa twojego projektu zawiera znaki specjalne i nie wiesz, jak dokładnie go sformatować.Jeśli używasz Cocoapods i próbujesz użyć kapsuły Swift w projekcie ObjC, możesz po prostu wykonać następujące czynności:
źródło
Przejdź do ustawień kompilacji w pliku projektu i wyszukaj „Nazwa nagłówka interfejsu wygenerowanego przez Objective-C . Wartością tej właściwości jest nazwa, którą powinieneś dołączyć.
Jeśli własność „Nazwa modułu produktu” (ta, od której domyślnie zależy powyższa właściwość) różni się w zależności od tego, czy kompilujesz dla testu / debugowania / wydania / itp. (Tak jak w moim przypadku), uniezależnij tę właściwość od tego zmiana przez ustawienie niestandardowej nazwy.
źródło
Importowanie
Swift
pliku do wewnątrzObjective-c
może spowodować ten błąd, jeśli nie zostanieimport
poprawnie wykonany.UWAGA: Nie musisz importować plików Swift zewnętrznie, wystarczy zaimportować jeden plik, który zajmuje się szybkimi plikami.
Podczas tworzenia / kopiowania pliku Swift w projekcie Objective-C . Automatycznie utworzyłby nagłówek pomostowy.
Sprawdź
Objective-C Generated Interface Header Name
wTargets -> Build Settings
.Na podstawie powyższego zaimportuję
KJExpandable-Swift.h
tak, jak jest.Twój będzie
TargetName-Swift.h
, gdzieTargetName
różni się w zależności od nazwy projektu lub innego celu, który mógł zostać dodany i uruchomiony na nim.Jak poniżej, moim celem jest
KJExpandable
, więc jestKJExpandable-Swift.h
źródło
Pierwszy krok:-
Wybierz Cel projektu -> Ustawienia kompilacji -> Szukaj („Zdefiniuj”) -> Zdefiniuj wartość aktualizacji modułu Nie na Tak
„Definiuje moduł”: TAK .
„Zawsze osadzaj szybkie biblioteki standardowe”: TAK .
„Zainstaluj nagłówek zgodności Objective-C”: TAK .
Drugi krok:-
Dodaj klasę pliku Swift w pliku celu C „.h”, jak poniżej
Zaimportuj „ProjectName (nazwa projektu) - Swift.h” do pliku „.m” celu C.
źródło
Jest jedno zastrzeżenie, jeśli importujesz kod Swift do plików Objective-C w tej samej strukturze. Musisz to zrobić, podając nazwę ramy i nawiasy kątowe:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
oto ustawienie kompilacji „Nazwa modułu produktu” (PRODUCT_NAME = MyFramework
).Po prostu dodanie
#import "MyFramework-Swift.h"
nie zadziała. Jeśli sprawdzisz katalog produktów wbudowanych (przed dodaniem takiego#import
, aby mieć co najmniej jedną udaną kompilację z jakimś kodem Swift w celu), to nadal powinieneś zobaczyć plikMyFramework-Swift.h
wHeaders
katalogu.źródło
Jeśli masz projekt utworzony w Swift 4, a następnie dodano pliki Objective-C, zrób to w następujący sposób:
Odniesienie: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
źródło
Zapoznaj się z uwagami przedpremierowymi dotyczącymi Swift i Celu C w tym samym projekcie
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75
Powinieneś importować
źródło
The name of this header is your product module name followed by adding "-Swift.h".
Więc nie jest to nazwa klasy, jak napisałeś, ale nazwa modułu produktu, który zajmuje się importowaniem wszystkich szybkich plików, a nie tylko jednego konkretnegoWyszukaj „Nazwa nagłówka interfejsu generowanego przez Objective-C” w Ustawieniach kompilacji celu, który próbujesz zbudować (powiedzmy, że to jest
MyApp-Swift.h
), i zaimportuj wartość tego ustawienia (#import "MyApp-Swift.h"
) do pliku źródłowego, do którego próbujesz uzyskać dostęp twoje interfejsy Swift API.Wartość domyślna dla tego pola to
$(SWIFT_MODULE_NAME)-Swift.h
. Możesz to zobaczyć, klikając dwukrotnie w polu wartości ustawienia „Nazwa nagłówka interfejsu generowanego przez Objective-C”.Ponadto, jeśli masz nazwy myślników w nazwie modułu (powiedzmy, że to jest
My-App
), to we$(SWIFT_MODULE_NAME)
wszystkich myślnikach zostaną zastąpione podkreślenia. Więc musisz dodać#import "My_App-Swift.h"
.źródło
Jeśli chcesz użyć pliku Swift do klasy Objective-C , więc od Xcode 8 możesz wykonać następujące kroki:
Jeśli masz projekt w Objective-C:
Skompiluj go i jeśli wygeneruje błąd linkera, taki jak: skompilowany z nowszą wersją języka Swift (3.0) niż poprzednie pliki (2.0) dla architektury x86_64 lub armv 7
Wprowadź jeszcze jedną zmianę w swoim
Kompiluj i uruchamiaj.
źródło
Uważaj na myślniki i podkreślenia, można je pomieszać, a nazwa projektu i nazwa docelowa nie będą takie same jak SWIFT_MODULE_NAME.
źródło
zobaczysz, kiedy wejdziesz z klawiatury #import <, a po automatycznym Xcode doradzi ci.
źródło
Znajdź plik .PCH w projekcie. a następnie dodaj
#import "YourProjectName-Swift.h"
Spowoduje to zaimportowanie nagłówków klas. Aby nie trzeba było importować do określonego pliku.źródło