Непонятно, почему вы ввели ?? ""
в этот код. Это кажется бессмысленным (он говорит: «Если я не могу добавить этот количественный тип, добавьте строку, которая не имеет смысла). Я думаю, что вы имеете в виду:« Я просто хочу, чтобы они были добавлены, если они не равны нулю и на самом деле они должны быть, но я не хочу добавлять !
и падать, если я ошибаюсь. "Если это то, что вы имеете в виду, то это то, что вы имеете в виду:
let healthkitTypesToRead = Set<HKObjectType>([
.quantityType(forIdentifier: .height),
.quantityType(forIdentifier: .bodyMass),
.quantityType(forIdentifier: .heartRate),
.categoryType(forIdentifier: .sleepAnalysis),
.quantityType(forIdentifier: .bloodPressureDiastolic),
.quantityType(forIdentifier: .bloodPressureSystolic),
].compactMap { [110] }
)
Однако Это все константы времени компиляции. Если какая-либо из них не удалась, это действительно ошибка программирования. Это точка, в которой !
уместно, и поэтому я бы лично написал это так (но это просто вопрос мнения и стиль):
let healthkitTypesToRead = Set<HKObjectType>([
.quantityType(forIdentifier: .height)!,
.quantityType(forIdentifier: .bodyMass)!,
.quantityType(forIdentifier: .heartRate)!,
.categoryType(forIdentifier: .sleepAnalysis)!,
.quantityType(forIdentifier: .bloodPressureDiastolic)!,
.quantityType(forIdentifier: .bloodPressureSystolic)!,
]
)
Примечание. Я заменил NSSet
на Set
. Если у вас нет веских причин, вам не следует использовать здесь NSSet
.
Нет откровенно никакого пути к механически, и значительно переведите C в Python, не перенося безумную потерю производительности. Поскольку все мы знаем, что Python не является в какой-либо степени C скоростью (с текущими компиляторами и интерпретаторами), но хуже, чем это то, что, к чему способен C (разрядная игра, целочисленная математика, приемы с блоками памяти) Python является очень медленным в, и что Python способен к Вам, не может выразить в C непосредственно. Прямой перевод поэтому был бы дополнителен неэффективный, на грани нелепости.
Очень намного лучше приблизьтесь, в целом должен действительно сохранить C C, и перенести его в модуль расширения Python (использующий БОЛЬШОЙ ГЛОТОК, Пирекс, Cython или пишущий обертку вручную) или назвать библиотеку C непосредственно с помощью ctypes. Все преимущества (и оборотные стороны) C для того, что уже C или Вы добавляете позже, и все удобство (и оборотные стороны) Python для любого кода в Python.
Это не удовлетворит Ваши потребности 'игры в песочнице', но необходимо понять, что Вы не можете поиграть в песочнице Python особенно хорошо так или иначе; прилагают много усилий и модификация CPython, и если Вы забываете тот мало дыры где-нибудь, Ваша тюрьма повреждается. Если Вы хотите поиграть в песочнице Python, необходимо запустить путем игры в песочнице всего процесса, и затем C расширения может поиграться в песочнице также.
Самый быстрый путь (с точки зрения усилия программиста, не эффективности), вероятно, включил бы использование существующего компилятора для компиляции C во что-то простое (например, LLVM) и также:
Перевод C к Python непосредственно возможен (и вероятно приводит к более быстрому коду, чем вышеупомянутые подходы), но Вы по существу записали бы бэкенд компилятора C, который является огромной задачей.
Редактирование, запоздалая мысль: возможно, еще более быстрый-и-грязный способ сделать, который должен взять дерево синтаксического анализа для кода C, преобразуйте это к структуре данных Python и интерпретируйте это в Python.
Почему, не сохраняя код C и создавая модуль Python C, который может быть импортирован в рабочую среду Python?
Во-первых, я полагал бы, что обертывание существующей библиотеки C с совершенством Pythonic обеспечивает API в форме модуля Python. Я посмотрел бы на большой глоток, ctypes, пирекс, и независимо от того, что там в эти дни. Сама библиотека C осталась бы там неизменной. Сохраняет работу.
Но если бы я действительно должен был написать исходный код Python на основе C, нет никакого инструмента, который я использовал бы, просто мой мозг. C позволяет слишком много забавных приемов с указателями, умных вещей с макросами, и т.д. что я никогда не доверял бы автоматизированному инструменту, даже если бы кто-то указал на тот мне.
Я упомянул Пирекс - это - язык, подобный C, но также и ориентированному Python. Я не сделал многого с ним, но это могло быть легче, чем запись чистого Python, учитывая, что Вы запускаете с C как руководство.
Преобразовывание из более ограниченных, более ручных языков, таких как IDL (ученым языков описания данных нравится использовать, не другой IDL) трудно, требуя ручного и умственного усилия. C? Забудьте это, только когда люди UFO дают нам свои необычные программные инструменты, тысяча лет перед нашим состоянием!
Любой автоматический перевод собирается пострадать для того, чтобы не использовать питание Python. Процессуальный кодекс C-типа работал бы очень медленно, если переведено непосредственно в Python, необходимо будет представить и заменить целые разделы большим количеством оптимизированного кода Python.
Я был бы personnaly использовать инструмент, чтобы извлечь uml схему из кода C, затем использовать его, чтобы сгенерировать код Python.
От этого squeleton я - запуск для избавлений от uncessary структур C-стиля, и затем я заполнил бы методы кодом Python.
Я думаю, что это был бы более безопасный и все же самый эффективный путь.
Можно всегда компилировать код C и загружаться в библиотеках с помощью ctypes в Python.