如何只初始化 Class 的一个属性?
How Do I Only Initialize ONE Of My Class's Properties?
我有一个具有三个属性的 class,topic
、navBarHidden
和 viewModel
,我需要使用 class 之一初始化视图模型的属性,topic
。
但是我不需要初始化其他属性,```topic.我必须初始化视图模型,因为它进行了必要的 API 调用。
这是代码片段。
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!
不起作用。那么,有人可以告诉我解决此问题的最佳方法吗?
正如您所说,值是在父级传递时决定的,您可以 initialise
目标视图接受那些 parameters
并简单地分配值。
import SwiftUI
struct TopicCell: View {
@Binding var navBarHidden : Bool
@State var topic: Topic
@ObservedObject var viewModel : TopicCellViewModel
init(topic:Topic,barHidden:Binding<Bool>) {
_navBarHidden = barHidden
_topic = State(wrappedValue: topic)
self.viewModel = TopicCellViewModel(topic:topic)
}
var body: some View{
NavigationView{
ForEach(0..<5) { index in
// Some stuff
}
}
}
}
struct CellView:View {
@State var isBarHidden = false
var body: some View{
TopicCell(topic: Topic(name: "someName"), barHidden: $isBarHidden)
}
}
struct Topic{
var name:String
}
class TopicCellViewModel:ObservableObject{
var topic:Topic
init(topic:Topic) {
self.topic = topic
}
}
我有一个具有三个属性的 class,topic
、navBarHidden
和 viewModel
,我需要使用 class 之一初始化视图模型的属性,topic
。
但是我不需要初始化其他属性,```topic.我必须初始化视图模型,因为它进行了必要的 API 调用。
这是代码片段。
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!
不起作用。那么,有人可以告诉我解决此问题的最佳方法吗?
正如您所说,值是在父级传递时决定的,您可以 initialise
目标视图接受那些 parameters
并简单地分配值。
import SwiftUI
struct TopicCell: View {
@Binding var navBarHidden : Bool
@State var topic: Topic
@ObservedObject var viewModel : TopicCellViewModel
init(topic:Topic,barHidden:Binding<Bool>) {
_navBarHidden = barHidden
_topic = State(wrappedValue: topic)
self.viewModel = TopicCellViewModel(topic:topic)
}
var body: some View{
NavigationView{
ForEach(0..<5) { index in
// Some stuff
}
}
}
}
struct CellView:View {
@State var isBarHidden = false
var body: some View{
TopicCell(topic: Topic(name: "someName"), barHidden: $isBarHidden)
}
}
struct Topic{
var name:String
}
class TopicCellViewModel:ObservableObject{
var topic:Topic
init(topic:Topic) {
self.topic = topic
}
}