L'obiettivo C non ha disponibilità controllo come parte della lingua, poiché lo stesso risultato è disponibile tramite il preprocessore Objective C. Questo è il modo "tradizionale" di farlo in linguaggi derivati da C.
Vuoi sapere se è compilato in modalità di debug?
#ifdef DEBUG
// code which will be inserted only if compiled in debug mode
#endif
Vuoi controllare in fase di compilazione per una versione minima? Utilizzare l'intestazione Availability.h in iOS e intestazioni simili per Mac OS X.
Questo file si trova nella directory/usr/include.
solo testare __IPHONE_OS_VERSION_MAX_ALLOWED con il preprocessore, per es .:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert) categories:nil]];
}else{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert)];
}
#else
[[UIApplication sharedApplication] registerUserNotificationSettings: (UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert)];
#endif
Come Swift non ha un preprocessore, hanno dovuto inventare un modo di fare questo tipo di controlli all'interno del linguaggio stesso.
Se si desidera controllare la disponibilità di un metodo in fase di esecuzione, si prega di notare che il modo appropriato è quello di utilizzare il metodo di respondsToSelector :, o instancesRespondToSelector: (quest'ultima a livello di classe).
Generalmente si desidera combinare entrambi gli approcci, compilare la compilazione condizionale e il controllo runtime.
Verifica presenza presenza metodo C, ad es. a livello di classe:
if ([UIImagePickerController instancesRespondToSelector:
@selector (availableCaptureModesForCameraDevice:)]) {
// Method is available for use.
// Your code can check if video capture is available and,
// if it is, offer that option.
} else {
// Method is not available.
// Alternate code to use only still image capture.
}
Se si desidera verificare se una funzione C esiste in fase di esecuzione, è ancora più semplice: se esiste, la funzione stessa non è nullo.
Non è possibile utilizzare lo stesso approccio identico in entrambe le lingue.
Swift è stato progettato con questa funzione in mente, quindi Apple potrebbe aggiungere la funzionalità senza creare incompatibilità o ostacolare le normali capacità del linguaggio. Objective-C è molto dinamico, ed è difficile dire in fase di compilazione ciò che sarà o non sarà disponibile in fase di runtime. – Avi
Date un'occhiata a https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html potete essenzialmente ottenere la stessa cosa da giocherellando con lo SDK di base e le destinazioni di distribuzione ma è più ingombrante. – pvg
puoi usare 'respondsToSelector: @selector (methodName)' per verificarne la disponibilità, in quanto non esiste un altro meccanismo dedicato come swift. –