在getter setter方法中获取警告消息<通过此函数的所有路径将自行调用>

时间:2019-07-13 06:23:18

标签: swift

使用getter和setter方法时遇到的问题,即通过此函数的所有路径都将自行调用。

import Foundation

struct FirebaseUser
{
    var student_class_id1 : Int
    {
        get
        {
            return self.student_class_id1
        }
        set(newstudent_class_id1)
        {
            self.student_class_id1 = newstudent_class_id1
        }

    }
    var name: String
    {
        get
        {
            return self.name
        }
        set(newName)
        {
            self.name = newName
        }
    }
    //var school_id: Int?

    var school_id: Int
    {
        get
        {

            return self.school_id
        }
        set(newSchoolId)
        {
            self.school_id = newSchoolId
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您没有理由定义这样的属性。该错误警告您严重的问题。看看每个吸气剂。您的实现是调用您要定义的getter。这将导致无限递归。与二传手相同。它会自行设置值。再次,无限递归。因此是错误。

由于您只需要简单存储属性,因此整个结构可以是:

struct FirebaseUser
{
    var student_class_id1 : Int
    var name: String
    var school_id: Int
}

在定义计算属性时,仅使用getset块。在这种情况下,您需要常规的存储属性。

如果在设置属性值时需要执行操作,请使用willSet和/或didSet

例如:

var name: String {
    didSet {
        print(name)
    }
}

那仍然是一个普通的存储属性,但是只要设置了新名称,它就会打印出来。

通常使用小写的驼峰式命名变量,因此应该是:

struct FirebaseUser
{
    var studentClassId1 : Int
    var name: String
    var schoolId: Int
}