在 getter setter 方法中,swift"/>

首页 > 解决方案 > 收到警告消息在 getter setter 方法中

问题描述

使用 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
        }
    }
}

标签: swift

解决方案


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

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

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

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

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

例如:

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

这仍然是一个普通的存储属性,但它会在设置时打印新名称。

使用小驼峰命名变量是标准的,所以它应该是:

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

推荐阅读