Objective-C에서 버전 체크 해주기.
앱이나 연동되는 기기 버전에 따라 다른 흐름으로 코드를 처리해주고 싶은데, 모든 클래스 마다 변수를 불러와서 사용하려니 매우 귀찮다.
안드로이드에서 SDK 버전 체크해서 어떤 버전 보다 높을 때 해당 함수를 실행해주는 코드를 만들어야 겠다...
간단하게 헤더 파일에만 정의해두면 글로벌 변수로 사용할 수 있는 코드가 있다.
1 2 | extern int PROTOCOL_VERSION; | cs |
헤더 파일 (.h file) 에 위와 같이 선언해두면
별탈 없이 다른 클래스에서도 가져오고, 정의할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #import "headerFileName.h" PROTOCOL_VERSION = 100; // 최초로 버전을 불러올 때 정의해주기. if(PROTOCOL_VERSION >= 234){ // 상위 버전인 경우 }else{ // 하위 버전인 경우 } | cs |
헤더 파일 import 하고, 위와 같이 버전 체크를 해주면 된다.
그런데 고정 값으로 되어 있지 않아서 잘못된 값으로 정의되는 것을 조심해야 한다.
1 2 3 | int PROTOCOL_VERSION = 100; // 최초로 버전을 불러올 때 정의해주기. | cs |
위쪽에는 int 선언하는게 빠졌는데, 저렇게 할 경우 Linker 에러가 뜬다.
다시 한번 선언해줘야하는 것을 잊지 말자.
더 좋은 방법은 없을까?
---
저렇게 했을 때 헤더 끼리 참조하게 되면서인지 링커 에러가 다시 뜨게 되었다.
이런 방식이 아니라 단순하게 singleton 클래스를 하나 만들어서 값을 보관하고 있는 것이 좋겠다는 생각이 들었다.
classname.sharedInstance.version 와 같이 호출해서 사용할 수 있으니 정말 간편하다.
---
Swift 에서는 Singleton 클래스를 아주 쉽게 만들 수 있다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | final class Singleton { // Can't init is singleton private init() { } //MARK: Shared Instance static let sharedInstance: Singleton = Singleton() //MARK: Local Variable var emptyStringArray : [String] = [] } | cs |
http://stackoverflow.com/a/39860897/4486389
복잡하던 코드가 몇 줄 이면 끝난다.
let 으로 선언된 class 는 자체적으로 겹치지 않게 해준다.
자주사용하게 될 것 같다. :)