Praca w mieszanym środowisku. importowane do pliku Obj-C, ale klasy wewnętrzne nie są widoczne, tylko te publiczne.Jak uzyskać dostęp do wewnętrznej klasy Swift w Objective-C w tych samych ramach?
Dokumentacja wyraźnie stwierdza wewnętrzne clasees powinna być dostępna między Swift i Obj-C:
Importowanie Swift w Objective-C
Aby zaimportować zestaw plików Swift w tym samym celu ramowego jako swój Kod Objective-C, nie musisz importować niczego do nagłówka parasolowego dla frameworka. Zamiast tego zaimportuj plik nagłówkowy wygenerowany przez Xcode dla kodu Swift do dowolnego pliku Objective-C .m, z którego chcesz użyć kodu Swift. Ponieważ wygenerowany nagłówek dla obiektu docelowego ramek jest częścią interfejsu publicznego frameworka , w wygenerowanym nagłówku dla obiektu ramowego pojawiają się tylko deklaracje oznaczone publicznym modyfikatorem . Ty mogą nadal korzystać Swift metod i właściwości, które są oznaczone wewnętrznym modyfikatora od wewnątrz części Objective-C swojej ramy, jak długo są one zgłaszane w ramach klasy, która dziedziczy z klasy Objective-C . Aby uzyskać więcej informacji na temat modyfikatorów poziomu dostępu, zobacz Access Control w The Swift Programming Language (Swift 2).
Przykładowy kod (Utwórz nowy projekt z ram)
// SwiftObject.swift
public class SwiftObject: NSObject {
public class func doSomething() {}
}
internal class YetAnotherSwiftObject: NSObject {
internal class func doSomething() {}
}
// SomeObject.m file
@implementation SomeObject
- (void)someMethod {
[SwiftObject doSomething];
}
- (void)someOtherMethod {
[YetAnotherSwiftObject doSomething]; // Use of undeclared identifier
}
@end
Nice! Nie wiedziałem o tym makro, a google niewiele pokazuje. Czy masz jakieś odniesienia z dokumentów Apple? – Yariv
Nice? To jest okropnie gadatliwe i nieporządne. Czy to naprawdę jest to, co musisz zrobić? Wpadłem na ten sam problem, a nawet jabłko powinno było zrobić coś lepszego. Porzucę to i wrócę do obiektywnego c, to nierozsądne! +1 za opublikowanie czegoś, co faktycznie działa (po wielu godzinach wyszukiwania). –
Zgodnie z dokumentacją firmy Apple "Nadal możesz używać metod i właściwości Swift oznaczonych wewnętrznym modyfikatorem z części Objective-C struktury, o ile są one zadeklarowane w klasie dziedziczącej po klasie Objective-C", jeśli klasa swift wywodzi się z innej klasy objc, powinna być dostępna w kodzie objc. Mam podobny problem i zaznaczyłem moją szybką klasę przez @objc i dziedziczy po NSObject, ale nadal nie jest dostępny w kodzie objc. – puru020