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
}
}
}
解决方案
你没有理由像这样定义你的属性。该错误警告您存在严重问题。查看每个吸气剂。您的实现是调用您尝试定义的吸气剂。这将导致无限递归。与二传手相同。它调用自己来设置值。再次,无限递归。因此错误。
由于您只需要简单的存储属性,因此您的整个结构可以是:
struct FirebaseUser
{
var student_class_id1 : Int
var name: String
var school_id: Int
}
仅在定义计算属性时使用get
and块。set
在这种情况下,您需要常规存储属性。
如果您在设置属性值时需要执行操作,请使用willSet
和/或didSet
.
例如:
var name: String {
didSet {
print(name)
}
}
这仍然是一个普通的存储属性,但它会在设置时打印新名称。
使用小驼峰命名变量是标准的,所以它应该是:
struct FirebaseUser
{
var studentClassId1 : Int
var name: String
var schoolId: Int
}
推荐阅读
- python - 如何单击仅具有锚点和 href 以及 nbor 标记的元素
- html - 如果视口上没有足够的空间,视频元素将低于前一个元素
- ruby - Ruby setter 的返回值
- javascript - window.ScrollHeight 和 window.ClientHeight 在 javascript 中返回相同的值
- android - 如何在 Android 中以编程方式截屏并分享
- javascript - 如何获取有关随机智能合约地址的数据。如创建日期、链表、持有者(持有多少个钱包)
- kdb - 如何计算 KDB 中的 30 天滚动窗口?
- mysql - MySQL 查询以根据自定义列名和值获取值
- python - 如何在 selenium webdriver 中修复此错误?
- php - MySQL Query 查找所有值匹配的标记的所有订阅