我在getter和setter上做了一个示例,示例在
下面import Foundation
class person
{
var first_name:String
{
get
{
return self.first_name
}
set
{
if (newValue.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil){
print("please enter valid name")
}
else
{
self.first_name = newValue
}
}
}
}
let person1 = person.init()
person1.first_name = "rahul"
但这给了我错误 但是当我这样做时
import Foundation
class person
{
var name = ""
var first_name:String
{
get
{
return name
}
set
{
if (newValue.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil){
print("please enter valid name")
}
else
{
name = newValue
}
}
}
}
let person1 = person.init()
person1.first_name = "rahul"
print(person1.first_name)
它运行并给我输出所以我的问题是如果我使用getter和setter那么为什么我不能像上面的例子中那样获取或设置变量,所以任何人都可以解释我是什么继续在这里
答案 0 :(得分:0)
好的,假设我设置了d3.event.sourceEvent.which
属性。所以我称之为二传手。 setter确保字符串有效,然后调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
这会调用self.first_name = newValue
的二传手。该字符串仍然有效,因此setter调用:
first_name
现在你看到了问题。这将永远持续下去,直到程序因递归过多而崩溃;你不能像这样让getter和setter自己调用。相反,请创建一个单独的self.first_name = newValue
属性,并使private var _first_name
的getter和setter访问权限。