#swift
Вопрос:
Чтобы не переписывать один и тот же код для разных целей, у меня есть «Универсальные» классы, доступные для всех целей.
Теперь я столкнулся с проблемой, когда я вызываю API, доступный для одной цели, но не для другой. Меня не волнует функциональность для другого целевого объекта, проблема в том, что код не строится, так как я не могу указать, что код должен вызываться только для «поддерживаемого» целевого объекта.
@available(iOS 13.0, *)
func isTestDevice() -> Bool {
#if canImport(UIKit)
print("iPhone")
print(UIDevice.current.identifierForVendor?.uuidString) //Cannot find 'UIDevice' in scope
return true
#endif
return false
}
Как я могу сделать эту функцию «необязательной» таким образом, чтобы на устройствах, поддерживающих UIDevice
ее, она возвращала значение true, а для других целей возвращала значение false?
Комментарии:
1. Мои цели-iOS и watchOS. UIDevice доступен только в UIKit, UIKit не доступен на сторожевых. Фактический метод сравнивает UUID устройства с моими устройствами для вывода отладочных данных в производственных сборках.
2. @мэтт тебе нужна дополнительная информация? Я просто хочу проверить идентификатор устройства для iPhone, и если это watchOS, вызывающий эту функцию, верните что-нибудь другое.
Ответ №1:
Ни @available(iOS 13.0, *)
то, ни #if canImport
другое, похоже, не проверяется во время компиляции по какой-то причине.
Я заставил это работать, сделав
#if os(iOS)
print(UIDevice.current.identifierForVendor?.uuidString)
#endif
тогда он не пытается компилироваться для других платформ.
Комментарии:
1. Не разглагольствуйте об ЭТОМ в ответе, пожалуйста. Ничего плохого не произошло; вопрос не был отклонен, закрыт или даже подвергнут критике. Законные опасения по поводу жестокого обращения могут быть опубликованы в meta.
2. Сайты Stack Exchange используют оценку из массового источника. Люди могут поднимать, опускать, закрывать голосование. Вопросы могут быть закрыты, и люди могут проголосовать за их повторное открытие. Голоса-это просто голоса; один голос-один из многих, и в конце концов достигается какое-то равновесие. Не следует воспринимать вещи лично или зацикливаться на отдельных событиях, но будьте готовы доверять «мудрости толпы» и учиться на том, что она говорит. Следует также иметь в виду, что ни сайт, ни кто-либо, кто им пользуется, не являются вашими личными слугами. Будьте готовы общаться в комментариях, улучшать вопрос и т. Д. Будьте открыты и дружелюбны. Расслабься. 🙂