社区首页 >问答首页 >将VStack作为结构中的属性

将VStack作为结构中的属性
EN

Stack Overflow用户
提问于 2020-02-21 12:14:26
回答 1查看 487关注 0票数 0

我需要在这样的结构中有一个VStack作为属性

代码语言:javascript
代码运行次数:0
复制
struct Str
{ 
  let view: VStack
  ....
}

编译器说:

“对泛型类型'VStack‘的引用需要<...>中的参数

插入“<<#Content:View#>>”

Xcode "fix“生成:

代码语言:javascript
代码运行次数:0
复制
struct Str
{
  let view: VStack<Content: View>
  ...
}

但是编译器仍然抱怨:

“预期complete >‘>完成泛型参数列表”

是否允许在结构中有一个VStack?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-21 12:48:25

您所发现的是,VStack并不是真正的类型。我们可以更准确地将其描述为“类型构造函数”。声明如下:

代码语言:javascript
代码运行次数:0
复制
struct VStack<Content> where Content : View {
    ...
}

你给它一些其他类型作为它的Content参数,它给你一个类型。给它类型Text,然后返回类型VStack<Text>。给它类型Image,然后返回类型VStack<Image>。你得到的类型是不同的类型!VStack<Text>类型的对象是,而不是,类型是VStack<Image>

所以你只需要知道哪种类型可以作为论点,对吗?问题是 of SwiftUI“type”实际上是泛型类型构造函数。所以类型变得复杂了。下面是我正在开发的一个应用程序的一个例子:

代码语言:javascript
代码运行次数:0
复制
var body: some View {
    VStack(spacing: 0) {
        scene
        if store.model.latestError != nil {
            Divider()
            ErrorView(store: errorStore)
                .padding(20)
        }
    } //
        .frame(width: 450)
}

body的类型是什么?我可以在运行时打印它以找出:

代码语言:javascript
代码运行次数:0
复制
print(type(of: AppView(store: store).body))

输出是

代码语言:javascript
代码运行次数:0
复制
ModifiedContent<VStack<TupleView<(AnyView, Optional<TupleView<(Divider, ModifiedContent<ErrorView, _PaddingLayout>)>>)>>, _FrameLayout>

请注意,body返回的对象类型公开了许多关于body实现的详细信息。例如,由于ErrorView有一个padding修饰符,body对象的类型包括ModifiedContent<ErrorView, _PaddingLayout>。我可以在不更改类型的情况下将填充量从20更改为30。但是如果完全删除padding修饰符,它就会更改类型(通过将ModifiedContent<ErrorView, _PaddingLayout>更改为仅ErrorView)。

那你怎么解决这个问题?一种方法是使用AnyView

代码语言:javascript
代码运行次数:0
复制
struct Str {
    let view: AnyView
    ...
}

let str = Str(view: AnyView(VStack {
    ...
}))

请注意,有时您会听到关于应该避免使用AnyView的建议。下面是乔·格罗夫解释原因的说明:

您可以使用AnyView包装器显式包装类型,在那里它们可以动态更改。 然而,动画系统将有一个更容易的时间,如果你可以按下视图图尽可能。您可以有一种布局类型,采用.portrait/.landscape,以不同的方式应用旋转、平移等,然后转换就可以动画化了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60345648

复制
相关文章
Golang 中 能否将 slice 作为 map 的 key?
最近好忙,也好久没水 Golang 的文章了,最近来水一些。说回今天的问题,这个问题非常简单,也能被快速验证。
LinkinStar
2023/10/18
2600
Django模板引擎中变量作为属性值调用
作者:matrix 被围观: 2,268 次 发布时间:2019-05-16 分类:Python 零零星星 | 4 条评论 »
HHTjim 部落格
2022/09/26
1.6K0
Django模板引擎中变量作为属性值调用
Python - 如何将 list 列表作为数据结构使用
使用 collections.deque ,它被设计成可以快速从两端添加或弹出元素
小菠萝测试笔记
2021/07/29
2.2K0
Python - 如何将 list 列表作为数据结构使用
numpy中的hstack()、vstack()、stack()、concatenate()函数详解
本文主要介绍一下numpy中的几个常用函数,包括hstack()、vstack()、stack()、concatenate()。
石晓文
2018/12/27
6.3K0
Opencv中数据结构Mat的相关属性
剑影啸清寒
2018/01/02
2.1K0
Opencv中数据结构Mat的相关属性
结构体作为函数的参数
> 只要结构体成员是一个具有单个值的数据类型,便可把它作为参数传递给接受该特定类型的函数。 > 使用这种方式为函数传递参数与普通变量作为参数相同,都是以传值的方式传递的。
怪兽
2022/12/31
2.1K0
将Scoop中的任何内容作为Rez软件包安装
我们上次介绍了rez-pipz可以帮我们把pypi上面的python包转换成rez软件包
用户9897904
2022/07/14
6510
将Scoop中的任何内容作为Rez软件包安装
numpy.vstack
Stack arrays in sequence vertically (row wise).
狼啸风云
2019/09/30
5200
【C 语言】结构体 ( 结构体作为函数参数 | 结构体指针作为函数参数 )
结构体变量 作为函数形参 , 在函数中 , 只能访问 该函数形参 , 无法修改 结构体内存 的值 ;
韩曙亮
2023/03/29
3.6K0
【C 语言】结构体 ( 结构体作为函数参数 | 结构体指针作为函数参数 )
Vue 中,如何将函数作为 props 传递给组件
作者:Michael Thiessen 译者:前端小智 来源:medium 点赞再看,养成习惯本文 GitHub https://github.com/qq44924588... 上已经收录,更多往
前端小智@大迁世界
2020/05/18
8.2K0
下篇1:将 ConfigMap 中的键值对作为容器的环境变量
继续接上篇,《一文了解K8S的ConfigMap》。上篇聊过,官方文档中提到的可以使用下面4种方式来使用 ConfigMap 配置 Pod 中的容器:
不背锅运维
2023/05/26
2.2K0
下篇1:将 ConfigMap 中的键值对作为容器的环境变量
scipy.sparse.vstack
scipy.sparse.vstack(blocks, format=None, dtype=None)[source]
狼啸风云
2019/10/22
9070
作为window对象属性的元素 多窗口和窗体
如果html文档中用id属性为元素命名。并且如果 window对象没有此名字的属性,则window对象会赋予一个属性,其名字为id属性的值,其值指向该元素
mySoul
2018/08/05
2.1K0
Swift 5.2 将实例作为函数调用
Swift 5.2中的一个新功能是可以将类型实例作为函数调用(callAsFunction)。或者,如Swift Evolution 提案所述,“用户定义的标称类型的可调用值”。此函数的简短描述是,它允许您调用实现了callAsFunction方法的任何类型的实例,就好像它是一个函数一样。
韦弦zhy
2020/03/19
2.4K0
ovirt将synology作为nfs存储域
最近有个东西比较折腾,需要将synology的nfs共享存储添加为存储域,原本以为只是很简单的问题,但是发现添加后总是提示报错。查看synology下的日志提示下述报错( kernel: NFSD: client X.X.X.X testing state ID with incorrect client ID)
姚华
2022/07/09
8870
SwiftUI 之 HStack 和 VStack 的切换
SwiftUI 的各种堆栈是许多框架中最基本的布局工具,能够让我们定义组视图,这些组视图可以按照水平、垂直或覆盖视图对齐。
Swift社区
2022/12/12
2.9K0
IntelliJ IDEA 中如何将 POM 中的版本号快速提出为属性
当然你也可以选择从菜单中进入,进入的路径为:Refactor | Extract | Property
HoneyMoose
2021/09/04
1.1K0
IntelliJ IDEA 中如何将 POM 中的版本号快速提出为属性
IntelliJ IDEA 中如何将 POM 中的版本号快速提出为属性
当然你也可以选择从菜单中进入,进入的路径为:Refactor | Extract | Property
HoneyMoose
2021/09/04
7800
IntelliJ IDEA 中如何将 POM 中的版本号快速提出为属性
将 Redis 作为图数据库
1. 简介 Redis 在 4.0 中正式支持了Module模块系统,使其可以进行丰富的扩展 图数据库的应用越来越广泛,RedisGraph 就是一个 Redis Module,可以将 Redis 变为一个高性能的图数据库 图数据库中的2个核心概念:点、边 点 用来描述实体,边 用来描述实体间的关系 实体有多个属性,Redis 中的 Hash 结构就是存储实体的最佳选择,图中的一个节点就是 Redis 中的一个 Hash 例如,假设有2个实体: 一个‘人’的实体描述的是‘奥巴马’,有两个属性,年龄 - 55
dys
2018/04/04
2.5K0
React技巧之将useState作为对象
原文链接:https://bobbyhadz.com/blog/react-type-usestate-object[1]
chuckQu
2022/08/19
9540

相似问题

将结构作为属性

32

将引用类型作为属性的活动结构

21

如何使用VStack作为SwiftUI中函数的输入?

16

如何将结构属性作为参数传递

34

将文件保存到作为类属性的数据结构中。

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文