2016-09-16 6 views
0

현재 건물 구성 (dev, production)을 기반으로 내 앱의 API 기본 경로를 정의하는 데 전역 변수를 사용하고 싶습니다. 이 현재의 접근 방식은 다음과 같습니다Swift에서 조건부 컴파일로 전역 변수 정의하기

1) 여기서

 struct ApiSettings { 

    static let API_DEV_BASEPATH = "http://dev.myapp.com" 
    static let API_PRODUCTION_BASEPATH = "http://prod.myapp.com" 

    // Return the basepath for the current app runtime mode 
    static var API_BASEPATH:String { 

     var bPath: String! 
     #if DEBUG 
      bPath = API_DEV_BASEPATH 
     #else 
      bPath = API_PRODUCTION_BASEPATH 
     #endif 
     return bPath 
    } 
} 

2) (나는 너무 스테이징 환경을 정의)

#if DEBUG 
let API_BASEPATH = "http://dev.app.com" 
#elseif STAGING 
let API_BASEPATH = "http://staging.app.com" 
#elseif RELEASE 
let API_BASEPATH = "http://production.app.com" 
#endif 

하지만 난 내 응용 프로그램에서 API_BASEPATH를 사용하려고 할 때 컴파일러가 "확인되지 않은 식별자"에 대해 불평합니다

나는 가장 우아한 해결책이 어떤 것인지 잘 모르겠습니다. PS. Swift3을 사용하고 있습니다.

+0

모든 환경 의존 변수를'plist' 파일로 추출하는 것이 훨씬 더 나은 설계가 될 것입니다. – Alexander

+0

.plist 파일에서 동일한 변수를 정의하고 코드를 사용하지 않고 빌드 구성 (디버깅, 준비, 릴리스)을 기반으로 추출하는 방법은 무엇입니까? 답변에 제공된 코드를 .plist로 추출한 상수로 확장하려고합니다. – Claus

+0

예, 빌드 구성 당 하나의 plist를 만들고 어느 것이 각 패키지에 포함되는지 변경합니다. – Alexander

답변

1

시도해보십시오.

static var API_BASEPATH:String { 
     get { 
      var bPath: String! 
      #if DEBUG 
       bPath = API_DEV_BASEPATH 
      #else 
       bPath = API_PRODUCTION_BASEPATH 
      #endif 
      return bPath 
     } 

    } 

희망이 있으면 혼란이 수정됩니다.