Jak zaimportować Kod Swift do Objective-C?
Napisałem bibliotekę w języku Swift i nie byłem w stanie zaimportować jej do mojego obecnego projektu, napisanego w Objective-C.
Czy są jakieś sposoby na import?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
13 answers
Musisz zaimportować TargetName-Swift.h
. Zauważ, że jest to nazwa docelowa - inne odpowiedzi popełniają błąd używając nazwy klasy.
Ten pojedynczy plik jest autogenerowanym nagłówkiem, który definiuje Interfejsy Objective-C dla wszystkich klas Swift w Twoim projekcie, które są przypisane @objc
lub dziedziczone z NSObject
.
Rozważania:
Jeśli nazwa docelowa zawiera spacje, zastąp je podkreślnikami (np.
My Project
staje sięMy_Project-Swift.h
)Jeśli twój cel jest framework, musisz zaimportować
<TargetName/TargetName-Swift.h>
-
Upewnij się, że Twój plik Swift jest członkiem docelowego
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 10:22:40
Instrukcje ze strony Apple:
Aby zaimportować Kod Swift do Objective-C z tego samego frameworka
Pod Build Settings , w Packaging upewnij się, że definiuje Moduł ustawienie dla tego celu ramowego jest ustawione na Tak . Importuj Kod Swift z tego celu ramowego na dowolny cel-C .m file within that Framework target używając tej składni i zastępując odpowiednią nazwy:
#import "Nazwa Produktu-Swift.h "
Revision:
Możesz importować tylko " ProductName-Swift.h" w .pliki M.
Pliki Swift w Twoim celu będą widoczne w Objective-C .pliki m zawierające to Oświadczenie o imporcie.
Aby uniknąć cyklicznych odniesień, Nie Importuj Swift do Objective-C plik nagłówkowy. Zamiast tego możesz zadeklarować klasę Swift, aby z niej korzystać w nagłówku Objective-C. Zauważ, że nie możesz podklasować klasy Swift w Objective-C.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-08 19:50:12
Oto co należy zrobić:
-
Utwórz nowy projekt w Objective-C
-
Utwórz nowy plik
.swift
- pojawi się okno popup i zapyta "Czy chcesz skonfigurować nagłówek mostkowy Objective-C" .
- Wybierz Tak .
Kliknij plik projektu Xcode
Kliknij na Build Settings
Znajdź pasek wyszukiwania i wyszukaj Definiuje Moduł .
Zmień wartość na Tak .
Szukaj Nazwa Modułu Produktu .
Zmień wartość na nazwę projektu.
W App delegate dodaj następujące :
#import "YourProjectName-Swift.h"
Uwaga: Gdy chcesz użyć pliku Swift, musisz zaimportować następującą linię:
#import "YourProjectName-Swift.h"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-17 10:21:07
Jeśli używasz Cocoapods i próbujesz użyć Swift pod w projekcie ObjC, możesz po prostu wykonać następujące czynności:
@import <FrameworkName>;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 20:18:22
Przejdź do konfiguracji w pliku projektu i wyszukaj " wygenerowana przez Objective - C Nazwa nagłówka interfejsu. wartość tej właściwości jest nazwą, którą powinieneś zawrzeć.
Jeśli twoja właściwość "Product Module Name" (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 test/debug/release/etc (Jak to ma miejsce w moim przypadku), to uniezależnij tę właściwość od tej zmiany, ustawiając niestandardową nazwę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-22 11:46:53
Importowanie pliku Swift
wewnątrz Objective-c
może spowodować ten błąd, jeśli nie działa prawidłowo import
.
Uwaga: nie musisz importować plików Swift zewnętrznie, wystarczy zaimportować jeden plik, który zajmuje się plikami swift.
Kiedy utworzyłeś/skopiowałeś plik Swift wewnątrz Objective-C project. Automatycznie utworzyłby nagłówek pomostowy.
Sprawdź Objective-C Generated Interface Header Name
w Targets -> Build Settings
.
Na podstawie powyższego, I zaimportuje KJExpandable-Swift.h
tak, jak jest.
Twój będzie TargetName-Swift.h
, Gdzie TargetName
różni się w zależności od nazwy twojego projektu lub innego celu, który możesz dodać i na nim uruchomić.
Jak poniżej mój cel jest KJExpandable
, więc to KJExpandable-Swift.h
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-04 10:59:42
Pierwszy Krok:-
Wybierz Cel Projektu - > Ustawienia Budowania - > Szukaj ('Definiuj') - > Zdefiniuj Moduł update value No to Yes
"definiuje Moduł": tak.
"zawsze osadzaj standardowe biblioteki Swift": tak.
"Install Objective - C Compatibility Header": yes.
Drugi Etap:-
Dodaj klasę plików Swift w celu C".H " Plik jak poniżej
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
Import ' ProjectName (Nazwa Twojego Projektu) - Swift.h 'W celu C".m " plik
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-17 10:42:49
Jest jedno zastrzeżenie, jeśli importujesz Kod Swift do plików Objective-C w ramach tego samego frameworka . Musisz to zrobić podając nazwę frameworka i nawiasy kątowe:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
Oto ustawienie budowania " Product Module Name "(PRODUCT_NAME = MyFramework
).
Proste dodanie #import "MyFramework-Swift.h"
nie zadziała. Jeśli sprawdzisz katalog built products (przed dodaniem #import
, więc masz przynajmniej jedną udaną kompilację z kodem Swift w celu), to powinien nadal widzieć plik MyFramework-Swift.h
w katalogu Headers
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 10:07:12
Sprawdź wstępne informacje o Swift i Objective C w tym samym projekcie
Powinieneś importować
#import "SCLAlertView-Swift.h"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-08 01:15:45
Wyszukaj "Objective-C Generated Interface Header Name" w Ustawieniach kompilacji obiektu docelowego, który próbujesz zbudować (powiedzmy, że jest to MyApp-Swift.h
) i zaimportuj wartość tego ustawienia (#import "MyApp-Swift.h"
) do pliku źródłowego, w którym próbujesz uzyskać dostęp do interfejsów API Swift.
Domyślną wartością tego pola jest $(SWIFT_MODULE_NAME)-Swift.h
. Możesz go zobaczyć, jeśli klikniesz dwukrotnie w polu wartość ustawienia "Objective-C Generated Interface header Name".
Również, jeśli masz myślniki w nazwie modułu (powiedzmy, że to My-App
), wtedy w $(SWIFT_MODULE_NAME)
wszystkie myślniki zostaną zastąpione podkreślnikami. Więc musisz dodać #import "My_App-Swift.h"
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-08 08:12:34
Jeśli chcesz użyć pliku Swift do klasy Objective-C , więc od Xcode 8 możesz wykonać poniższe kroki:
Jeśli stworzyłeś projekt w Objective-C:
- Utwórz nowy plik Swift
- Xcode automatycznie zapyta o plik nagłówka mostu
- Wygeneruj go
- Import " Nazwa_projektu-Swift.h " w kontrolerze Objective-C (import w implementacji Nie w interfejsie) (jeśli projekt ma spację pomiędzy nazwą, więc użyj podkreślenie " Nazwa_projektu-Swift.h")
- będziesz mógł uzyskać dostęp do swojej klasy Objective-C w języku Swift.
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
Zrób jeszcze jedną zmianę w swoim
- Xcode -> Project -> Target -> Build Settings -> Use Legacy Swift Language Version - > Yes
Zbuduj i uruchom.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-08 04:55:56
Znajdź .Plik PCH wewnątrz projektu. a następnie dodaj #import "YourProjectName-Swift.h"
to zaimportuje nagłówki klas. Dzięki temu nie musisz importować do określonego pliku.
#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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-18 20:31:18
Jeśli masz projekt utworzony w Swift 4, a następnie dodano pliki Objective C, wykonaj w ten sposób
@objcMembers
public class MyModel: NSObject {
var someFlag = false // @objc
func doSomething() { // @objc
print("doing something")
}
}
Odniesienie https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 16:08:15