使用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
}
}
}
答案 0 :(得分:1)
您没有理由定义这样的属性。该错误警告您严重的问题。看看每个吸气剂。您的实现是调用您要定义的getter。这将导致无限递归。与二传手相同。它会自行设置值。再次,无限递归。因此是错误。
由于您只需要简单存储属性,因此整个结构可以是:
struct FirebaseUser
{
var student_class_id1 : Int
var name: String
var school_id: Int
}
在定义计算属性时,仅使用get
和set
块。在这种情况下,您需要常规的存储属性。
如果在设置属性值时需要执行操作,请使用willSet
和/或didSet
。
例如:
var name: String {
didSet {
print(name)
}
}
那仍然是一个普通的存储属性,但是只要设置了新名称,它就会打印出来。
通常使用小写的驼峰式命名变量,因此应该是:
struct FirebaseUser
{
var studentClassId1 : Int
var name: String
var schoolId: Int
}