티스토리 뷰
안녕하세요.
요즘 왠 버그 하나 때문에 난리를 치고 있는데 해결이 안되네요ㅠ
(나중에 해결되면 박제할 생각입니다.)
아무튼 버그 하나에 시간을 너무 쓰다 보니 오늘은 머리 식힐겸 자주 쓰이는거 공부해봅시다.
혹시 코드 작업 하시다가 아래와 같은 코드를 본 적 있나요?
#if DEBUG // <- 이거
print("It's Debug")
#else
print("It's not Debug")
#endif
if 는 if인데 # 이 붙은 특이한 이 친구가 오늘의 주제입니다.
보통은 조건부 컴파일 지시자 혹은 전처리문이라고 부른다고 합니다.
(저도 쓴 적은 있는데 이렇게 부르는건 처음 알았네요)
* 조건부 컴파일 지시자
- 코드베이스의 특정 부분을 감시하고, 특정 조건이 충족되면 자동으로 실행되는 도구나 시스템
- 쉽게 말해서 상황에 따라 코드를 다르게 굴러가도록 해주는 도구입니다.
- 당연히 Swift 뿐만아니라 C나 C++ 같이 다른 언어에서도 존재하는 기능입니다.
* 전처리문 : 컴파일이 되기전에 미리 처리되는 문장을 말한다고 합니다.
- 여기서 중요한 것은 컴파일에 조건을 추가해 원하는 방향으로 코드를 컴파일을 할수있다는 겁니다.
* 왜 쓰나요?
- 상황에 따라 코드를 다르게 실행해야 하는 경우 사용됩니다.
- 주로 디버그냐 아니냐 로 쓰이기도 하고 시뮬레이터냐 아니냐로도 쓰입니다.
- 번거로운 수정이나 코드가 길어지는 것보다 처리가 단순한 편입니다.
* 어떻게 쓰나요?
- #if 조건 : 조건에 맞으면 실행합니다.
- #else : 위 조건에 맞지 않는 경우 실행합니다.
- #endif : 해당 조건문이 끝났다는걸 알려줍니다.
#if targetEnvironment(simulator)
print("It's simulator")
#else
print("It's iOS")
#endif
- 일반 if 문이랑 동일한데 #이랑 #endif 만 추가 되었다고 생각하시면 됩니다.
* 어떤 종류가 있나요?
- 여러가지 종류가 있지만 몇개만 소개해 드리겠습니다.
- 시뮬레이터 구분
#if targetEnvironment(simulator) // 시뮬레이터이면
- 디버그 구분
#if DEBUG // 디버그이면
- 특정 모듈 사용 여부 (이 안에 모듈이름을 적어주시면 됩니다.)
#if canImport(UIKit)// 모듈 사용 가능 여부
- OS 종류
#if os(iOS) // iOS 인 경우
- swift 버전
#if swift(<5.0) // swift 버전이 5.0 전이면
* 깨알 팁(?)
- 자주 쓰일지는 모르겠으나 설정에서 원하는 이름으로 만들 수 있습니다.
- Targets -> BuildSettings > Swift Compiler - Custom Flags 에서
- "-D이름" 으로 Other Swift Flags 에 추가해주시면 아래처럼 사용이 가능해집니다.
- 디버그는 잘되는데 Release 는 잘 안되더라고요;;(이유는 저도 아직 잘 모르겠습니다)
가만 생각하면 코드 쓸때 별 생각 안하고 쓴 것 같은데
은근히 자주 보게 되는 친구여서 정리해보았습니다.
그럼 오늘도 파이팅입니다.
'iOS개발 > Swift 기본' 카테고리의 다른 글
iOS 13 미만 AppDelegate / SceneDelegate 설정 (0) | 2024.06.27 |
---|---|
Swift 생체인식(ex. Face ID) 알아보기 (0) | 2024.04.26 |
Swift Shadow(그림자) 설정 알아보기 (0) | 2024.02.27 |
UICollectionView reloadData 이후 이벤트 처리 (0) | 2023.09.18 |
Swift Date 타입을 활용해보자 (덧셈,뺄셈등) (0) | 2023.09.13 |