小编Wim*_*mps的帖子

SwiftUI ViewModel 发布属性和绑定

我的问题可能是误解的结果,但我无法弄清楚,所以这里是:

当使用像 TextField 这样的组件或任何其他需要绑定作为输入的组件时

TextField(title: StringProtocol, text: Binding<String>)
Run Code Online (Sandbox Code Playgroud)

和一个带有 ViewModel 的视图,我自然地认为我可以简单地将我的 ViewModel@Published属性作为绑定传递:

class MyViewModel: ObservableObject { 
     @Published var title: String
     @Published var text: String
}

// Now in my view
var body: some View {
    TextField(title: myViewModel.title, text: myViewModel.$text)
}
Run Code Online (Sandbox Code Playgroud)

但我显然不能,因为出版商不能充当约束力。根据我的理解,只有一个@State属性可以这样做,但不是所有的@State属性都应该只存在于视图中而不是视图模型中吗?或者我可以做这样的事情:

class MyViewModel: ObservableObject { 
     @Published var title: String
     @State var text: String
}
Run Code Online (Sandbox Code Playgroud)

如果我不能,当我的文本更新时,我如何将信息传输到我的 ViewModel?

mvvm ios swift swiftui

7
推荐指数
1
解决办法
4463
查看次数

具有未知返回类型的Std函数

我试图在不直接知道返回类型的情况下声明std函数.

显然,它将在编译时知道,但我找不到正确的方式来声明它.

最重要的是,我需要创建一个容器,其中包含来自此函数返回的值.

template <typename... Args>
class Sample
{
public:
    Sample(Args... args, std::function</*unknown return type*/(Args...)> fnct) :
        _inputBuff(std::forward_as_tuple(std::forward<Args>(args)...))

    { }

    std::tuple<Args...>                     _inputBuff;
    std::vector</*unknown return type*/>    _resultBuff;

};
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

c++ std-function

3
推荐指数
1
解决办法
776
查看次数

标签 统计

c++ ×1

ios ×1

mvvm ×1

std-function ×1

swift ×1

swiftui ×1