#swift #macos #swiftui #macos-big-sur
Вопрос:
Я пытаюсь понять, как лучше всего отображать ошибки или вещи, которые не совсем соответствовали плану в приложении macOS Big Sur.
Например, у меня есть функция, которая откроет каталог, в котором находятся файлы, сохраненные приложением, однако бывают случаи, когда это не работает из-за пустого URL-адреса или других ошибок, и я не могу понять, как продемонстрировать это пользователю. Эта функция заключается в следующем:
func showInFinder(url: URL?) {
guard let url = url else {
print("returning... URL nil ")
return
}
NSWorkspace.shared.selectFile(nil, inFileViewerRootedAtPath: url.path)
}
Я думал о том, чтобы отобразить предупреждение, например:
struct ContentView: View {
@State var showsAlert = false
var body: some View {
Button(action: {
self.showsAlert.toggle()
}) {
Text("Show Alert")
}
.alert(isPresented: self.$showsAlert) {
Alert(title: Text("Hello"))
}
}
}
Но в большинстве мест, где мне нужно, чтобы ошибка отображалась в функциях, а не в представлениях. Если только я не смогу отобразить их на нажимаемых кнопках или на таких действиях, как onAppear()
.
Есть какие-нибудь предложения? Специально для функций.
Комментарии:
1.
.alert
только для представлений SwiftUI он не будет работать в функции или прикреплен к функции. Вы можете использовать.alert(item:)
для отправки пользовательского объекта с информацией, необходимой для предупреждения, такой как заголовок и сообщение, в модель общего представления, чтобы предупреждение отображалось вместе с пользовательским сообщением..alert
является модификатором представления, в котором он нуждаетсяView
.2. Итак, по сути, мне нужно просмотреть возврат функции (bool, int и т. Д.) И решить, что что-то пошло не так, а затем отобразить предупреждение? Могу ли я иметь более одного предупреждения на просмотр?
3. Да, вам нужно оценить, и нет, у вас не может быть более одного предупреждения, потому что они присутствуют в одном и том же месте, и у вас будут ошибки. Как я уже сказал
alert(item)
, это позволит вам использовать пользовательский объект, такой как astruct
, который должен иметь переменнуюtitle
иmessage
с пользовательской информацией.