无法在swift中使用getter和setter设置变量本身

时间:2017-09-28 17:33:02

标签: swift properties getter-setter

我在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那么为什么我不能像上面的例子中那样获取或设置变量,所以任何人都可以解释我是什么继续在这里

1 个答案:

答案 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访问权限。