2017-02-15 3 views
1

스위프트에 전 처리기 명령 이 있는지 확인하여 모듈이 있는지 확인하고 싶습니다. 나는 CocoaPods 종속성 관리자 도구를 사용하고 컴파일 시간이 인 동안 을 확인하여 사용할 수 있도록하거나 사용자 지정 해결 방법을 수행해야합니다. 컴파일하거나 응용 프로그램을 보관하는 경우Swift 모듈이 현재 프로젝트에있는 경우 컴파일 타임을 확인하는 방법은 무엇입니까?

#if module(SwiftyJSON) 

#else 

#endif 

답변

4

canImport 지시어를 제안하는 제안 (SE-0075)이 수락되었지만 아직 Swift 3.0.2/Swift 3.1 베타 버전에서는 구현되지 않았습니다. 구현을 추적하는 버그는 SR-1560입니다. 지시어와

,이 같은 것을 쓸 수있을 것입니다 :

#if canImport(UIKit) 
// UIKit-based code 
#elseif canImport(Cocoa) 
// OSX code 
#elseif 
// Workaround/text, whatever 
#endif 

추신 : 스위프트는 프리 프로세서를 가지고 있지 않기 때문에 "처리기 명령"스위프트에 대한 올바른 용어가 아닙니다.

1

, 그것은 단지 그것을 실제로 당신이 작성한 코드를 기반으로, 필요한 모듈, 방법 및 클래스를 설치합니다 :

이 같은 것입니다. 내 지식으로는 모듈이 있는지 여부를 확인할 수있는 방법이 없습니다. 모듈을 갖고 있거나 가질 수 없어야하기 때문입니다. 다른 말로하면, 당신은 그것을 가지고 있거나 그렇지 않습니다. 개발자로서 포드를 설치했는지 여부를 알고 있기 때문에 런타임에 무언가를 확인할 방법이 없어야합니다. 즉 이미 미리 결정되어 있습니다. 왜 이걸하고 싶니?

+0

라이브러리/광고 작성 중입니다. 클라이언트 프로젝트가 이미 라이브러리 (이 경우에는 SwiftyJSON)를 사용하고 있다면 더 많은 방법을 제공하고 싶습니다. 종속성으로 SwiftyJSON을 추가하고 싶지는 않습니다. 의무적 인 것이 아니기 때문에 도우미 라이브러리와 같습니다. – KabraBoja

+0

흥미로운 점은, 실제로는 실제로 잘 모르겠습니다. 나는 왜 당신이 그런 if 문을 갖고 싶어하는지 이해할 수있다. 그러나 나는 그것이 당신이 달성하고자하는 것을 작동시키지 않는다고 생각한다. 왜냐하면 그것은 패키지가 있는지를 모른 채 코드를 작성하고 컴파일한다는 것을 의미하기 때문이다. Xcode 나 그 밖의 곳에서는 작동하지 않을 것입니다. 포드에 의존성이있어서 자신과 의존성 코드를 사용하고 컴파일 할 수 없거나 할 수 없거나 할 수 없습니다. – Florensvb

+0

그래, 나는 그것이 무슨 뜻인지 이해하고 있으며 사실입니다. 전 Cocoapods가 Objective-C로이 문제를 해결했다고 생각합니다 (과거에 프로젝트 헤더에 추가 된) 몇 가지 글로벌 정의를 추가했지만 Swift 모듈을 사용하면 지정한 것을 가져 오기만하면됩니다 (어쨌든 추한 접근법). 어쩌면 Subspec처럼 SwiftyJSON 추가로 또 다른 꼬투리를 만들어야 할 것 같습니다. – KabraBoja