2016-06-27 7 views
1

Welche Dosis ViewControllerClass bedeutet hier?Welche Art von Klassendefinition ist das: ClassName <Variable>: Elternteil

Soweit ich weiß, ist dies nicht Protokoll, Delegat oder Erweiterung. Jeder kann erklären, wie das funktioniert?

.h-Datei:

@interface BaseViewControllerTest <ViewControllerClass> : XCTestCase 

@property ViewControllerClass viewController; 

- (void)setUpTestWithStroyboardName:(NSString *)viewControllerName; 

.m-Datei:

@implementation BaseViewControllerTest 


- (void)setUpTestWithStroyboardName:(NSString *)viewControllerName {} 

wie folgt verwendet:

#import "BaseViewControllerTest.h" 

@interface CTSelectChildAccountViewControllerTests : BaseViewControllerTest <CTSelectChildAccountViewController *> 

@end 

Antwort

2

mit Xcode Ab 7 Objective-C unterstützt generics:

Objective-C wurde aktualisiert, damit Swift und Swift einfacher und effizienter zusammenarbeiten können. Die neuen Objective-C-Sprachmerkmale umfassen:

  • Generika. Sie können Typinformationen für Auflistungsklassen wie NSArray, NSSet und NSDictionary angeben. Die Typinformationen verbessern den Swift-Zugriff, wenn Sie von Objective-C aus überbrücken, und vereinfachen den Code, den Sie schreiben müssen.

CTSelectChildAccountViewController ist ein ViewController. Dosis, die bedeutet ViewControllerClass ist definiert als UIViewController?

Das Sternchen aus der Instanziierung ist ebenfalls relevant, daher wird ViewControllerClass viewController als CTSelectChildAccountViewController* viewController interpretiert.

Was ist der Vorteil außer Swift?

Der Objective-C-Compiler verfügt jetzt über mehr Typinformationen, damit er die von Ihnen aufgerufenen Methoden besser überprüfen kann. Beispielsweise können Sie Cocoa-Sammlungen mit dem Typ annotieren, der in sie eingefügt wird, z. NSArray<NSString*> *array, und haben den Compiler Stellen, wo Sie versehentlich einen falschen Typ einfügen.

Und wie ist es mit Swift nützlich?

Swift hat integrierte Unterstützung für Generika. Das Hinzufügen von Lightweight-Generics zu Ihrer Objective-C-API vereinfacht die Interaktion mit Swift, da Ihre API präziser übersetzt wird. Wenn Sie beispielsweise Ihr Beispiel aus Swift übersetzen, behält es seine generische Eigenschaft bei, anstatt den generischen Typparameter ViewControllerClass durch seinen Basistyp zu ersetzen.

+0

Danke für Ihre Antwort. Kannst du bitte etwas weiter erklären, wie das im obigen Beispiel nützlich ist? – Bernard

+0

CTSelectChildAccountViewController ist ein ViewController. Dosis, die "ViewControllerClass" bedeutet, ist als UIViewController definiert? Was ist der Vorteil außer schnell? Und wie ist es mit swift nützlich? – Bernard