让我们看看简单的源代码:
import SwiftUI
struct MyView: View {
@State var mapState: Int
init(inputMapState: Int)
{
mapState = inputMapState //Error: 'self' used before all stored properties are initialized
} //Error: Return from initializer without initializing all stored properties
var body: some View {
Text("Hello World!")
}
}
Run Code Online (Sandbox Code Playgroud)
这里需要init函数,因为我想在这里做一些数据加载,但是有一个问题,@State这里不能初始化变量!我该怎么办?也许这是一个非常简单的问题,但我不知道该怎么做。非常感谢!
我很难STArray通过Google找到的文档和其他howtos /讨论来理解.我在下面有一些更相关的问题.
根据文档,STArrays是
ST monad中的可变盒装和未装箱阵列.
这给了我一个印象,那STArray就是用作在函数之间传递的状态(假设你有一个必须经常更新的向量).
显然,这使用的方式不同:
ST s (STArray s a e)
Run Code Online (Sandbox Code Playgroud)
s这里的州是什么?如果它是在内部使用的,那么为什么这不会被用户隐藏?
这也意味着,如果我们想要将一个STArray s Int Int被传递为状态,那么就可以定义
type StateArray a = Control.Monad.State (ST s (STArray s Int Int)) a
Run Code Online (Sandbox Code Playgroud)
这看起来相当麻烦.
最后,
ST和之间有什么区别State?STArray和IOArray,如果ST和IO是否意味着"内部"使用?谢谢!!
我是WPF的新手,试图建立一个项目,该项目遵循Josh Smith描述模型 - 视图 - 视图模型设计模式的优秀文章的建议.
使用Josh的示例代码作为基础,我创建了一个包含许多"工作区"的简单应用程序,每个工作区由TabControl中的选项卡表示.在我的应用程序中,工作空间是一个文档编辑器,它允许通过TreeView控件操作分层文档.
虽然我已成功打开多个工作区并在绑定的TreeView控件中查看其文档内容,但我发现TreeView在选项卡之间切换时"忘记"其状态.例如,如果Tab1中的TreeView部分展开,则在切换到Tab2并返回到Tab1后,它将显示为完全折叠.此行为似乎适用于所有控件的控件状态的所有方面.
经过一些实验,我意识到我可以通过将每个控件状态属性显式绑定到底层ViewModel上的专用属性来保留TabItem中的状态.然而,这似乎是很多额外的工作,当我只是希望我的所有控件在工作区之间切换时记住它们的状态.
我想我错过了一些简单的东西,但我不知道在哪里寻找答案.任何指导都将非常感谢.
蒂姆,谢谢
更新:
根据要求,我将尝试发布一些演示此问题的代码.但是,由于作为TreeView基础的数据很复杂,我将发布一个展示相同symtoms的简化示例.这是主窗口中的XAML:
<TabControl IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=Docs}">
<TabControl.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding Path=Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<view:DocumentView />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
上面的XAML正确绑定到DocumentViewModel的ObservableCollection,其中每个成员都通过DocumentView呈现.
为了简化这个例子,我从DocumentView中删除了TreeView(如上所述),并将其替换为包含3个固定标签的TabControl:
<TabControl>
<TabItem Header="A" />
<TabItem Header="B" />
<TabItem Header="C" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,DocumentView和DocumentViewModel之间没有绑定.运行代码时,内部TabControl在切换外部TabControl时无法记住其选择.
但是,如果我显式绑定内部TabControl的SelectedIndex属性...
<TabControl SelectedIndex="{Binding Path=SelectedDocumentIndex}">
<TabItem Header="A" />
<TabItem Header="B" />
<TabItem Header="C" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)
...到DocumentViewModel上的相应虚拟属性...
public int SelecteDocumentIndex { get; set; }
Run Code Online (Sandbox Code Playgroud)
...内部标签能够记住它的选择.
我知道我可以通过将这种技术应用到每个控件的每个视觉属性来有效地解决我的问题,但我希望有一个更优雅的解决方案.
我是AngularJS的新手,想知道如何在Controller中更改状态.
例如,我通常会在按钮单击时更改状态:
<input type="submit" class="btn btn-lg btn-primary btn-block" value="Log In" ui-sref="main.navigation"/>
Run Code Online (Sandbox Code Playgroud)
因此,在提交按钮时,我的页面将更改为导航页面.这工作正常,但如果我想先在我的控制器中做一些逻辑,然后根据结果,我想要更改为特定页面.如何在控制器内执行此操作,而不是单击按钮.
这是我的modules.js,以防你好奇:
angular.module('ecsMain', [
'ui.router',
'ui.bootstrap',
'ngTable'
])
.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('main/login');
$stateProvider
.state('main', {
abstract: true,
url: '',
templateUrl: 'view/main.html'
})
.state('main.login', {
url: '',
controller: ECSMainController,
templateUrl: 'view/login.html'
})
.state('main.phoneCalls', {
url: '',
controller: AccordionDemoCtrl,
templateUrl: 'view/phoneCalls.html'
})
.state('main.navigation', {
url: '',
controller: ModalDemoCtrl,
templateUrl: 'view/navigation.html'
})
.state('main.myModalContent', {
url: '',
controller: ModalDemoCtrl,
templateUrl: 'view/myModalContent.html'
})
.state('main.alertMessage', {
url: '',
controller: ModalDemoCtrl,
templateUrl: 'view/alertMessage.html' …Run Code Online (Sandbox Code Playgroud) 我正在研究java for web,它提到http是无状态的.这是什么意思以及它如何影响编程
我也在研究spring框架,并在那里提到一些bean必须在状态发生变化时声明为内部bean.这意味着什么?
我需要在无头ubuntu(Ubuntu 12.04.2 LTS-64 Bit)中安装vagrant .Vagrant ver-v1.3.0和Virtual box-4.2.18.添加vagrant包装盒后,当我给出"vagrant up"命令时,我收到以下错误:
Bringing machine 'default' up with 'virtualbox' provider...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
The guest machine entered an invalid state while waiting for it
to boot. Valid …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何通知另一个组件有关状态更改.假设我有3个组件 - App.jsx,Header.jsx和SidebarPush.jsx,我只是想做的就是用onClick切换一个类.
因此,单击时Header.jsx文件将有2个按钮将状态切换为true或false.其他2个组件App.jsx和Header.jsx将需要了解这些状态更改,以便只要这些状态发生更改,它们就可以切换类.
import React from 'react';
import Header from 'Header';
import classNames from "classnames";
import SidebarPush from 'SidebarPush';
import PageWrapper from 'PageWrapper';
var MainWrapper = React.createClass({
render: function() {
return (
<div className={classNames({ 'wrapper': false, 'SidebarPush-collapsed': !this.state.sidbarPushCollapsed })}>
<Header/>
<SidebarPush/>
<PageWrapper>
{this.props.children}
</PageWrapper>
</div>
);
}
});
module.exports = MainWrapper;
Run Code Online (Sandbox Code Playgroud)
import React from 'react';
import ReactDom from 'react-dom';
class Header extends React.Component {
constructor() {
super();
this.state = {
sidbarPushCollapsed: false,
profileCollapsed: false
};
this.handleClick = …Run Code Online (Sandbox Code Playgroud) 我需要状态从改变DISABLED到NORMAL的Button,当一些事件发生.
这是我的Button的当前状态,目前已禁用:
self.x = Button(self.dialog, text="Download",
state=DISABLED, command=self.download).pack(side=LEFT)
self.x(state=NORMAL) # this does not seem to work
Run Code Online (Sandbox Code Playgroud)
anyonne可以帮助我如何做到这一点?
我有一个要求,我想要检测与Android中的呼叫相关的两种事件
这在Android中可行吗?
这篇文章是有文化的Haskell.只需输入像"pad.lhs"这样的文件ghci就能运行它.
> {-# LANGUAGE GADTs, Rank2Types #-}
> import Control.Monad
> import Control.Monad.ST
> import Data.STRef
Run Code Online (Sandbox Code Playgroud)
好的,所以我能够想出如何ST用纯代码表示monad.首先,我们从我们的引用类型开始.它的具体价值并不重要.最重要的是PT s a不应该与任何其他类型同构forall s.(特别是,它既不应该同形()也不应该同形Void.)
> newtype PTRef s a = Ref {unref :: s a} -- This is defined liked this to make `toST'` work. It may be given a different definition.
Run Code Online (Sandbox Code Playgroud)
那种为s是*->*,但现在不是真的很重要.对于我们所关心的一切,它可能是多面手的.
> data PT s a where
> MkRef :: a -> PT s …Run Code Online (Sandbox Code Playgroud)