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