Как я могу программно найти версию Swift?

Я знаю, что могу найти версию Swift, с которой я сейчас работаю, вернувшись к терминалу и набрав:

xcrun swift --version Swift version 1.1 (swift-600.0.57.4) Target: x86_64-apple-darwin13.4.0 

Кроме того, я читал о макросах препроцессора в Swift, но не повезло найти константу версии Swift.

По мере приближения Swift 1.2 было бы неплохо отметить старый код, который работает только на Swift 1.1 (Xcode до 6.2) или новый код, который нуждается в Xcode 6.3 (Swift 1.2)

Примечание. Я также могу использовать system (), чтобы сделать что-то вроде:

 system("xcrun swift --version | grep version > somefile.txt") 

Затем откройте файл somefile.txt, но предпочтете более простое решение

5 Solutions collect form web for “Как я могу программно найти версию Swift?”

Вы можете использовать условные команды компиляции для проверки конкретной версии Swift, используемой для создания вашего проекта:

 #if swift(>=3.0) print("Hello, Swift 3!") #elseif swift(>=2.2) print("Hello, Swift 2.2!") #elseif swift(>=2.1) print("Hello, Swift 2.1!") #endif 

Наконец, обходной путь для этого. Я использую константы с префиксом __ вы можете наблюдать на своей игровой площадке. Это было бы легче с некоторым уровнем отражения , но …

__IPHONE_OS_VERSION_MAX_ALLOWED – 80200, что означает __IPHONE_8_2 для Xcode 6.2 (Swift 1.1), но его значение составляет 80300 ( __IPHONE_8_3 ) в Xcode 6.3 (Swift 1.2)

 func isSwift12() -> Bool { return __IPHONE_OS_VERSION_MAX_ALLOWED == 80300 } isSwift12() 

Итак, теперь в вашей библиотеке вы можете быстро выйти и сказать, что версия вашего пользователя Swift неверна, используя это:

 assert(isSwift12(), "Need Swift 12") 

Свифт даст вам приятное:

утверждение не выполнено: Need Swift 12: файл, строка 20

UPDATE WWDC 2015 – Swift 2.0

Как сказано в блоге Swift от Apple, в Swift 2.0 у нас есть # #available блоки для проверки некоторых версий ОС в нашем коде. Примером может служить:

 if #available(OSX 10.11, *) { monochromeFilter!.setValue(CIColor(red: 0.5, green: 0.5, blue: 0.5), forKey:kCIInputColorKey) } else { // Fallback on earlier versions } 

Swift 3.1 расширяет атрибут @available для поддержки указания номеров версии Swift в дополнение к существующим версиям платформы.

 // Swift 3.1 @available(swift 3.1) func intVersion(number: Double) -> Int? { return Int(exactly: number) } @available(swift, introduced: 3.0, obsoleted: 3.1) func intVersion(number: Double) -> Int { return Int(number) } 

Из вашего комментария:

Я хочу проверить, потому что разные версии Swift имеют разные функции

Вы не должны проверять версию своего языка программирования, чтобы использовать некоторые функции или нет. Этот подход намного лучше:

 if (self.respondsToSelector(Selector("yourMethodSelector"))) { self.yourMethodSelector(test, sender: self) } else { //error handling } 

Просто проверьте, доступен ли метод или нет.

Для iOS :

var systemVersion = UIDevice.currentDevice (). systemVersion;

Для OSX :

var systemVersion = NSProcessInfo.processInfo (). operatingSystemVersion;

K.

  • Тестирование блока заказа с использованием XCTest в Xcode 6
  • SpriteKit & Swift: создание узлов через didBeginContact помешает позиционированию
  • Xcode 6 / iOS 8 Симуляция местоположения не работает
  • iOS Simulator не воспроизводит звук
  • Лучшая практика для 2000+ аннотаций в MapKit
  • Как изменить текст кнопки в Swift Xcode 6?
  • Используйте масштабирование, а не собственное разрешение - Xcode 6
  • Xcode 6 - создать UIImageView с равными высотами с ориентацией экрана?
  • Когда я пытаюсь создать экземпляр UINib, я получаю: этот класс не является ключевым значением, совместимым с кодировкой для ключевого представления
  • Получение ITMS-4238 ошибки «избыточной двоичной загрузки» не приводит к изменению версии сборки или версии приложения
  • Макет относительно предупреждения о марке XCode 6, но без ограничений
  • Interesting Posts

    Обработка ответа 401 с помощью sendAsynchronousRequest: queue: completeHandler:

    Сравнение даты или часовой пояс не установлено должным образом

    Распознавание речи с использованием звука AVAudioEngine Blocks после записи

    UIWebView программно задает начальный масштаб масштабирования при загрузке внешнего веб-сайта?

    EKCADErrorDomain с использованием calendarWithIdentifier

    Что такое свойство растяжения UIImageView. Как я могу использовать это свойство.?

    iPhone 8, iPhone 8 Plus и код устройства iPhone X

    Заполнение массива из запроса select в iOS

    FBRequest вопрос – получить информацию друзей

    Внедрение протокола UITableViewDataSource в двух разных классах

    Как изменить шрифт и цвет текста заголовка UINavigationBar

    Интеграция NavigatorIOS с стеком UINavigationController (obj C)

    Facebook iOS SDK: как обращаться с кнопкой SKIP при запросе публикации?

    Добавить водяной знак с помощью AVAssetWriter и AVAssetWriterInput

    dequeueReusableCellWithIdentifier forIndexPath

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.