当前位置: 首页 > 知识库问答 >
问题:

在特定情况下何时使用class vs struct[重复]

卢俊发
2023-03-14

这是我的场景:

我在表视图中有一个用户列表,每行显示一些用户信息,如地址、电话号码。

我可以点击一个用户,我把用户传递到另一个屏幕,比如细节视图控制器,在这里我可以更改用户的信息。然后我可以点击回来,这些变化会影响到TableView。

在上面的场景中,我应该使用什么classstruct。我已经尝试了这两种方法,当我只需要修改详细视图控制器中的用户信息时,类可能会更容易,但它会导致任何副作用吗?

我读过一些文章,他们说默认情况下总是选择struct,但这让我感到困惑。有人可以给我一些建议,告诉我什么时候使用一个而不是另一个,并解释原因。谢谢。


共有2个答案

臧梓
2023-03-14

最好使用结构,因为它们是值类型,具有唯一的内存地址(创建副本)。在你的情况下更好,因为你有多个用户,每个用户都是唯一的。相反,如果您为用户使用类,并且如果同一个用户有多个实例,那么更改一个用户的属性将更改另一个用户,因为类是引用类型,指向相同的内存地址。

须新
2023-03-14

如果您选择class,那么您不需要做任何事情,只需传递存在于用户数组中的相同对象。

如果您选择struct,它将按值调用,并且在另一个实例中不会更改任何内容,因此您需要通过委托通知通知您的视图控制器有关更改的信息(可能在后退按钮单击中)。您可以在代理回调或通知对象中传递用户模型,并通过比较其id在用户数组中替换它。

 类似资料:
  • 我使用开关盒获得较大范围:

  • 我正在玩grpc 有人成功使用进行生产吗?我们需要包括特使在内的所有依赖项吗?

  • 问题内容: 当前,当我发出此SQL时,它将获得不同的用户名。 我有一些不同的用户名,它们代表组,例如。 我想将所有其他用户名(恰好是数字)分组为一个组,例如 我可以实现以下目标吗? 编辑:从答案修改的查询 问题答案: @bfavaretto很好(对他+1),但是如果您不了解前缀或前缀不同,则可以使用类似以下内容的方法:

  • 我在一个DB中有两个表(和),它们每个都有一个称为的相互列。 我当前使用以下代码仅从中导入一些数据(,): 如果我也想从导入数据(例如,名为和的列),那么我应该向该代码添加什么? 我的目标是拥有这些钥匙: 编辑: 编辑2: 仍然得到一个错误:

  • 我在运行时通过我的应用程序中的提供注入服务接口的实现。 最近,一个协作团队中的某个人创建了同一服务接口的另一个实现,并且该类被添加到了一个jar中,这是我在应用程序中无法避免的。因此,这会引发,我可以通过生产者方法和注入点上的CDI限定符来解决该异常。我想问一下是否有其他方法可以避免这种开销。我可以使用我的方法作为默认实现,使容器忽略第二个实现吗?我在producer方法上添加了注释和注释,以检查

  • 我正在使用redux saga。执行分派时,会执行likePost和addPost等函数。 然后每次我使用异步存储。获取令牌的getItem。换句话说,它是重叠的 因为我必须使用jwt令牌 我需要不断传递这样的头到api。这也是重叠 这个怎么用没有冗余,或者说怎么用最方便? 这是我的密码 (saga/post.js) (佐贺/index.js)