W moim projekcie mam rozszerzenia Swift nad Objective C, które działały znakomicie w Xcode 7.2.Xcode 7.3 niezadeklarowany typ dla Obj C enum w kodzie Swift
Ale z Xcode 7.3 nie powiedzie się z "niezadeklarowanym typem" w pliku Swift, w którym przedłużam obumenie.
Zbudowałem przykładowy projekt, który kompiluje i działa dobrze, ale nie mogę sprawić, by istniejący projekt zaakceptował przedłużenie w stosunku do Obj C enum.
UPDATE:
Po ponownej instalacji Xcode 7.2 Mogę potwierdzić, że projekt kompiluje i buduje pomyślnie.
Po uruchomieniu w Xcode 7.2, próbowałem ponownie uruchomić ten projekt w Xcode 7.3 i ponownie ten sam problem -> nie można zbudować rozszerzenia Swift nad obj C.
Po wyczyszczeniu i usunięciu wyprowadzonych danych w Xcode 7.3 otrzymuję również błąd brakujący nagłówka -Swift.h, ponieważ klasy Swift nie zostały skompilowane, więc nagłówek nie został jeszcze utworzony.
Kod wyjaśnienie:
My Obj C enum wewnątrz "FriendRequestResult.h":
typedef NS_ENUM(NSInteger, FriendStatus)
{
FriendStatusRequestedByUser = 1,
FriendStatusRequestedByOtherUser,
FriendStatusFriends,
FriendStatusBlocked,
FriendStatusNone,
FriendStatusError,
};
Teraz, zgodnie z oczekiwaniami w moim AppName-pomostowe header.h mam:
#import "FriendRequestResult.h"
Następnie mam szybkie rozszerzenie przez FriendStatus, który buduje się w Xcode 7.2, ale kończy się niepowodzeniem z "użyciem niezadeklarowanego typu" w Xcode 7.3:
extension FriendStatus
{
init(stringValue : String?)
{
if let stringValue = stringValue
{
switch stringValue
{
case "REQUESTED_BY_USER": self = .RequestedByUser
case "REQUESTED_BY_OTHER": self = .RequestedByOtherUser
case "FRIENDS": self = .Friends
case "BLOCKED": self = .Blocked
default: self = .None
}
}
else
{
self = .None
}
}
}
W rzeczywistości to rozszerzenie w ramach wyliczenia ma również inne funkcje pomocnicze, ale nie powinno to w żaden sposób zmieniać problemu.
Oczywiście, jeśli rozszerzenie enum daje niezadeklarowany typ, to używanie tego typu kończy się niepowodzeniem wszędzie w kodzie Swifta z tymi samymi "niezadeklarowanymi rzeczami". Zasadniczo wyliczenie nie jest w ogóle widoczne dla części projektu Swift, nawet jeśli import odbywa się w nagłówku pomostowym.
To pytanie zostało zasadniczo zmienione z pierwszej wersji.
Czy chcesz udostępnić próbkę kodu? – Laurent
@JohnDifool, spróbuję ... ale w tej sytuacji wydaje się skomplikowane, aby mieć pewność, że podzieliłeś odpowiednie części. – Fawkes
Stworzyłem nowy projekt hybrydowy z twoim typedef NS_ENUM (NSInteger, FriendStatus) 'w pliku nagłówkowym Objective-C i twoim' extension FriendStatus' w pliku Swift. Kompiluje się dobrze. Czy możesz mi powiedzieć, jak uzyskać błąd? – matt