빠른 답변…
Swift 2.0부터는 특정 시스템에서만 실행되는 코드를 보호하기 위해 또는 #available
에서 사용할 수 있습니다 .if
guard
if #available(iOS 9, *) {}
Objective-C에서 시스템 버전을 확인하고 비교를 수행해야합니다.
[[NSProcessInfo processInfo] operatingSystemVersion]
iOS 8 이상에서.
Xcode 9부터 :
if (@available(iOS 9, *)) {}
전체 답변…
드문 경우이지만 Objective-C 및 Swift에서는 장치 또는 OS 기능의 표시로 운영 체제 버전에 의존하지 않는 것이 좋습니다. 일반적으로 특정 기능이나 클래스를 사용할 수 있는지 확인하는보다 안정적인 방법이 있습니다.
API가 있는지 확인 :
예를 들어 다음을 UIPopoverController
사용하여 현재 장치에서 사용 가능한지 확인할 수 있습니다 NSClassFromString
.
if (NSClassFromString(@"UIPopoverController")) {
// Do something
}
약하게 연결된 수업의 경우 수업에 직접 메시지를 보내는 것이 안전합니다. 특히 이것은 "필수"로 명시 적으로 링크되지 않은 프레임 워크에서 작동합니다. 누락 된 클래스의 경우 표현식은 nil로 평가되어 조건이 실패합니다.
if ([LAContext class]) {
// Do something
}
CLLocationManager
and과 같은 일부 클래스는 UIDevice
장치 기능을 확인하는 메소드를 제공합니다.
if ([CLLocationManager headingAvailable]) {
// Do something
}
기호가 있는지 확인 :
때로는 상수가 있는지 확인해야합니다. 이는 iOS 8 UIApplicationOpenSettingsURLString
에서을 통해 설정 앱을로드하는 데 사용되었습니다 -openURL:
. 이 값은 iOS 8 이전에는 존재하지 않았습니다.이 API에 nil을 전달하면 충돌이 발생하므로 먼저 상수가 있는지 확인해야합니다.
if (&UIApplicationOpenSettingsURLString != NULL) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
운영 체제 버전과 비교 :
비교적 드물게 운영 체제 버전을 확인해야 할 필요가 있다고 가정 해 봅시다. iOS 8 이상을 대상으로하는 프로젝트 NSProcessInfo
의 경우 오류 발생 가능성이 적은 버전 비교를 수행하는 방법이 포함되어 있습니다.
- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version
이전 시스템을 대상으로 프로젝트를 사용할 수 있습니다 systemVersion
에 UIDevice
. Apple은 GLSprite 샘플 코드 에서이를 사용합니다 .
// A system version of 3.1 or greater is required to use CADisplayLink. The NSTimer
// class is used as fallback when it isn't available.
NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
displayLinkSupported = TRUE;
}
어떤 이유로 든 원하는 것이 무엇인지 결정한 경우 systemVersion
이를 문자열로 취급하거나 패치 개정 번호가 잘릴 수 있습니다 (예 : 3.1.2-> 3.1).