Из вашего комментария , вы спросили, почему ваш код не работал, что я объясню в моем ответе.
Согласно документации , условная компиляция Блок имеет следующий синтаксис:
Обратите внимание, что он говорит «операторы» внутри блока. .font(.headline)
не является заявлением, поэтому незаконно помещать его туда. Это также очевидно в формальной грамматической нотации далее по странице:
Кроме того, в блоке «Примечание» чуть выше формальной грамматики:
Каждый оператор в теле блока условной компиляции анализируется, даже если он не скомпилирован. Однако есть исключение, если условие компиляции включает в себя swift()
условие платформы.
Это объясняет, почему в вашем блоке #elseif
также есть ошибка.
Другими словами, #if
операторы являются , а не вашими директивами препроцессора C ++:)
Поэтому, чтобы решить проблему, вы должны поместить весь оператор в этих блоках. Один (тупой) способ исправить это:
#if os(iOS)
Text(Novitads.title)
.font(.headline)
.fontWeight(.regular)
.onTapGesture {
UIApplication.shared.open(URL(string: Novitads.link)!)
}
#elseif os(macOS)
Text(Novitads.title)
.font(.title)
.fontWeight(.regular)
.onTapGesture {
// UIApplication.shared.open(URL(string: Novitads.link)!)
// you would use this on macOS to open URLs, right?
NSWorkspace.shared.open(URL(string: Novitads.link)!)
}
#endif
Конечно, решение Asperi по извлечению platformFont
метода - это лот лучше.