Swift 不';“创造”;用户结构上的currentUser type属性;导致无限递归?

Swift 不';“创造”;用户结构上的currentUser type属性;导致无限递归?,swift,data-structures,Swift,Data Structures,通过苹果公司的“应用程序开发与Swift”学习Swift编程。 我在第2.3章的以下任务中遇到了困难: 假设您有一个需要用户登录的应用程序。你可能有 与下面所示类似的用户结构。但是除了 跟踪特定的用户信息,您可能希望 了解当前登录用户的方式。创建一个currentUser 在下面的User结构上键入属性,并将其分配给用户对象 代表你。现在,您可以通过user 结构。打印当前用户的属性 struct User { var userName: String var email:

通过苹果公司的“应用程序开发与Swift”学习Swift编程。 我在第2.3章的以下任务中遇到了困难:

假设您有一个需要用户登录的应用程序。你可能有 与下面所示类似的
用户
结构。但是除了 跟踪特定的用户信息,您可能希望 了解当前登录用户的方式。创建一个
currentUser
在下面的
User
结构上键入属性,并将其分配给用户对象 代表你。现在,您可以通过
user
结构。打印当前用户的属性

struct User {

    var userName: String

    var email: String

    var age: Int

}

如果理解正确,我需要在
User
结构中创建
currentUser
类型为
User
的属性?这将导致无限递归,不是吗?因此,我不确定我的回答是否正确。请帮助澄清。

是的,你是对的,那将是一个递归结构。关键是每个内部
用户
字段不会立即创建,因此不会在创建
用户
后立即爆炸

如果为每个创建的
用户
立即创建一个“内部”
用户
,是的,这将导致对
用户
构造函数的无限调用,并导致堆栈溢出

请注意问题的措辞:

在下面的用户结构上创建currentUser type属性,并将其分配给代表您的用户对象

内部
用户
不是为每个创建的
用户
创建的(如果严格执行,将无限递归)。创建一个
currentUser
,并将其提供给所有其他
User
s。所以在这种情况下,不,这不会导致无限递归


注意,我是从一个不了解Swift的人的角度来回答的。

是的,你说得对,那将是一个递归结构。关键是每个内部
用户
字段不会立即创建,因此不会在创建
用户
后立即爆炸

如果为每个创建的
用户
立即创建一个“内部”
用户
,是的,这将导致对
用户
构造函数的无限调用,并导致堆栈溢出

请注意问题的措辞:

在下面的用户结构上创建currentUser type属性,并将其分配给代表您的用户对象

内部
用户
不是为每个创建的
用户
创建的(如果严格执行,将无限递归)。创建一个
currentUser
,并将其提供给所有其他
User
s。所以在这种情况下,不,这不会导致无限递归


请注意,我是从一个不认识斯威夫特的人的角度来回答的。

仔细阅读练习。它要求您创建一个与您以前创建的实例属性不同的实例属性。也就是说,您正在寻找一种方法来询问
用户
键入当前登录的用户是谁,而不是询问某个特定的用户。(我就到此为止,因为这是一个学习练习,您可能想自己找到一个完整的解决方案……)

关于递归问题:一个类型引用该类型的实例,或者一个类型的实例引用其他实例,这是完全可以的。例如,您可以在
User
上创建一个
FavoriteTacher
属性,该属性指向
User
的另一个实例


你需要注意的是你是否在创建圆形结构(例如,如果我说我最喜欢的老师是,内特说他最喜欢的老师是,马特说他最喜欢的老师是我),以及您正在编写的算法是否能够安全地处理循环结构,而不会陷入无限递归或无限循环。(如果你打算按照
FavoriteTheacher
属性查找所有喜欢的老师,直到找到一个
nil
,那你就要倒霉了。)

仔细阅读练习。它要求您创建一个与您以前创建的实例属性不同的实例属性。也就是说,您正在寻找一种方法来询问
用户
键入当前登录的用户是谁,而不是询问某个特定的用户。(我就到此为止,因为这是一个学习练习,您可能想自己找到一个完整的解决方案……)

关于递归问题:一个类型引用该类型的实例,或者一个类型的实例引用其他实例,这是完全可以的。例如,您可以在
User
上创建一个
FavoriteTacher
属性,该属性指向
User
的另一个实例

你需要注意的是你是否在创建圆形结构(例如,如果我说我最喜欢的老师是,内特说他最喜欢的老师是,马特说他最喜欢的老师是我),以及您正在编写的算法是否能够安全地处理循环结构,而不会陷入无限递归或无限循环。(如果您计划通过以下
FavoriteTheacher
属性查找所有喜爱的教师,直到找到一位
nil
为止,那么您将度过一段不愉快的时光。)

我需要在User结构中创建User类型的currentUser属性

你如何做到这一点有严格的限制。结构不能将实例属性类型化为同一类型的结构。这会导致内存管理问题,编译器会阻止您这样做

我需要在User结构中创建User类型的currentUser属性

你如何做到这一点有严格的限制。结构不能有实例属性