创建"a currentUser type property on a User struct"不会导致无限递归吗?



通过苹果的"使用Swift"学习Swift编程。我在第2.3章中的以下任务面临困难:

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

struct User {
    var userName: String
    var email: String
    var age: Int
}

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

仔细阅读练习。它要求您创建一个类型属性,它与您之前创建的实例属性不同。也就是说,您正在寻找一种 User类型的方法,当前登录的用户是谁,而不是询问某些特定用户。(因为这是一个学习练习,所以我会停在那儿,您可能想自己达到一个完整的解决方案...)

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

您要注意的是您是否正在创建圆形结构(例如,如果我说我最喜欢的老师是 @nate-cook,Nate说他最喜欢的老师是@matt,Matt说他最喜欢的老师是我),以及您编写的算法是否可以安全地处理圆形结构而不会陷入无限递归或无限环路。(如果您打算通过遵循favoriteTeacher属性找到所有喜欢的老师,直到找到nil的属性,那么您将度过糟糕的时光。)

是的,您是对的,那将是递归结构。关键是每个内部User字段均未立即创建,因此在创建User时不会立即爆炸。

如果立即为创建的每个User创建一个"内部" User,则是的,这将导致对User构造函数的无限调用,并导致stackoverflow。

请注意问题的措辞:

在下面的用户结构上创建一个当前的使用者类型属性,并将其分配给代表您的用户对象。

不是为创建的每个User创建一个内部User(如果严格完成,它将无限地反复出现)。创建了一个currentUser,并将所有其他User s提供给。因此,在这种情况下,不,这不会导致无限递归。

请注意,我是从不认识Swift的人的角度回答的。

我需要在用户结构中创建类型用户的当前使用者属性?

您如何做到这一点有严格的限制。结构不能具有键入相同类型的struct的实例属性。这将导致内存管理问题,并且编译器将阻止您这样做。

最新更新