我是 Swift 3 的 Ios 编程新手。我很好奇为什么需要在 Class 的 getter 和 setter 中创建私有(private) VAR?如果我不添加这 2 个私有(private) ( var ) 会发生什么?
class Person {
private var _firstname: String!
private var _lastname: String!
var firstname: String {
return _firstname
}
var lastname: String {
return _lastname
}
var fullname: String {
return "\(firstname) \(lastname)"
}
}
最佳答案
具有公开的只获取计算属性的私有(private)存储属性是一种旨在使变量公开但将 setter 保持私有(private)的模式。实现此目的的更简洁的方法是为存储的属性指定一个私有(private) setter ,从而消除对这些计算属性的需要:
class Person {
private(set) var firstname: String!
private(set) var lastname: String!
var fullname: String {
return "\(firstname ?? "") \(lastname ?? "")"
}
}
请注意,如果您已将这些定义为隐式解包,那么您的 fullname
计算属性可能想要安全地解包它们,如上所示。
或者,如果名称不能更改,您可以将它们定义为由初始化程序设置并且再也不会更改的常量:
struct Person {
let firstname: String!
let lastname: String!
var fullname: String {
return "\(firstname ?? "") \(lastname ?? "")"
}
}
完全不相关,我不确定在这种情况下我会建议隐式包装可选值。隐式解包选项的目的是针对无法在初始化程序中设置的属性,但一旦设置,它们就永远不会是 nil
。
不过,通常在处理联系人时,您必须考虑他们可能为 nil
的情况。在那种情况下,我不会让它们隐式展开可选值(例如,我可能会使用 ?
而不是 !
)。或者,如果它们不能为 nil
,我会确保在初始化程序中设置它们,然后根本不将它们设为可选。这完全取决于您将使用此定义捕获的业务规则。我假设您有充分的理由制作这些隐式解包的可选值,但为了 future 的读者,我只警告人们应该警惕过于随意地使用隐式解包的可选值。
关于ios - 为什么需要在这个人类中添加 2 个私有(private)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41519370/