【发布时间】:2021-02-27 05:30:44
【问题描述】:
我有一个具有三个属性topic、navBarHidden 和viewModel 的类,我需要使用该类的一个属性topic 来初始化视图模型。
但我不需要初始化其他属性,```topic.我必须初始化视图模型,因为它会进行必要的 API 调用。
这是代码的 sn-p。
struct TopicCell: View {
@Binding var navBarHidden : Bool?
@State var topic: Topic?
@ObservedObject var viewModel : TopicCellViewModel
init() {
self.viewModel = TopicCellViewModel(topic: self.topic!)
}
}
起初topic 和navBarHidden 不是可选的,但后来我不得不初始化它们,我不想这样做。初始化它们的所有数据都需要传入。所以我将它们设为可选项,这样我就不必初始化它们了,然后我只需要强制解开可选项。
但这给了我一个问题。
NavigationLink(
destination: DebateChatView(navBarHidden: $navBarHidden, topic: $topic, subtopic:
.constant(SubTopic(dictionary: ["id": "", "topic": "Random Subtopic", "title": topic!.title,
"bool": false , "messages": MOCK_MESSAGEZ])))
请注意topic 和navBarHidden 这两个绑定变量。这些现在不起作用,因为 DebateChatView 期望绑定正常数据,而不是绑定选项。但是$topic! 不起作用。那么,有人可以告诉我解决此问题的最佳方法吗?
【问题讨论】:
-
使布尔值可选听起来不太好。布尔值要么为真,要么为假。绑定布尔将从父视图接收值,那么为什么是可选的?您还使“主题”成为可选的,并立即在初始化程序中强制解包,这很危险,您没有在哪里提供任何值。为什么不给它们默认值?
-
@TusharSharma 在我调用 TopicCell 时需要传入主题。因此,它不应该有默认值。 navBarHidden 也应该由父对象决定,所以它不应该有默认值
标签: swift binding swiftui optional forced-unwrapping