Как я могу программно найти версию 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.

  • Изменить назначение кнопки «Назад»
  • xcodebuild не может подключиться к симулятору
  • Self-размер ячейки с несколькими ярлыками не показывает многострочную метку
  • Как установить цвет фона UIButton дляState: UIControlState.Highlighted in Swift
  • XCode 6 UICollectionview viewwithtag не работает
  • Изменение метрик для нового симулятора iOS в Xcode 6
  • Производительность измерительного кода игровой площадки XCode 6
  • Как получить симулятор iPod Touch в Xcode 6.1
  • Swift: несколько интервалов в одном корпусе с использованием кортежа
  • UIViews со встроенными представлениями прокрутки (UITableView, UICollectionView) неоднозначны с Auto Layout в Xcode 6 b2. Ошибка или причина?
  • Ошибка Xcode с кодом выхода 254
  • Диаграммы классов UML для Xcode (быстрое программирование)
  • Interesting Posts

    Уничтожить массив JSON в массив объектов Swift

    Отключение неявных анимаций CALayer

    поддержка firebase google или запросов или любое альтернативное решение

    NSSet: должен ли я использовать float / double в NSSet?

    Кордова / Phonegap 3.1 клавиатура (все еще) накладывает сфокусированные поля формы – iOS 7

    Устранение неисправностей: startFirstResponder, не отображающий клавиатуру для некоторых пользователей

    Как я могу локально обнаруживать продвижение iPhone iPhone между пользователями?

    Демо-объявления недоступны в iOS 9

    Xcode Simulator: как удалить старые ненужные устройства?

    Как я могу управлять потенциальным бесконечным нажатием контроллеров представлений в стеке контроллера навигации? IOS

    Изменение размера UITableViewCell на высоту UILabel динамически

    NSString для NSDate для yyyy-MM-dd'T'HH: mm: ss.SSS + 05: 30 формат

    iOS живые двоичные файлы: должна ли каждая арка включать бит-код?

    Общий параметр, ограниченный другим общим параметром

    Проверьте, может ли какое-либо приложение обрабатывать схему URL в мобильном сафари на iOS

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