【发布时间】:2018-03-10 13:16:51
【问题描述】:
我正在做一个关于 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 那么为什么我不能像我在上面的例子中那样获取或设置它自己的变量所以任何人都可以解释我发生了什么这里
【问题讨论】:
-
"但是这给了我错误但是当我做这个例子时"什么错误?
-
在您的第一个示例中,您有一个 计算属性,其中包含一个 getter 和一个 setter,它们 递归地调用自己 ... ????跨度>
-
你应该使用 struct 而不是 class 并且只创建一个容易出错的初始化器。
struct Person { let name: String ; init?(name: String) { guard name.rangeOfCharacter(from: .decimalDigits) == nil else { return nil } ; self.name = name } } -
所以在初始化你的 Person 对象时
if let person = Person(name: "Rahul GUsai") { print(person.name) // "Rahul GUsai\n" } else { print("please enter valid name") } -
您还可以将一些计算属性添加到您的 Person 结构中,以添加功能,例如从人名
extension Person { var personNameComponents: PersonNameComponents? { return PersonNameComponentsFormatter().personNameComponents(from: name) } var givenName: String? { return personNameComponents?.givenName } var familyName: String? { return personNameComponents?.familyName } }中提取 familyName 或 givename
标签: swift properties getter-setter