所以我在这里浏览 Apple 文档 - Apple Docs
然后我遇到了这个:
public struct TrackedString {
public private(set) var numberOfEdits = 0
public var value: String = "" {
didSet {
numberOfEdits += 1
}
}
public init() {}
}
添加
public private(set)
究竟如何工作?如果你能展示一些更简单的例子/解释,那就太棒了!
这只是意味着
numberOfEdits
的 getter 是公开的,而 setter 是私有的。仅此而已。
这种情况的原因是你可以公开阅读
numberOfEdits
,但你只能通过改变value
来设置它。如果完全是public
,那么任何人都可以设置,但是如果只是可设置,那么didSet
中的value
就不能修改了。 private(set)
是这两者之间的妥协。
此属性可以 read,但不能从 outside 设置。
您通过编写
private(set)
分配较低的访问级别。
它的作品像Public getter和Private setter.
//MARK:- Foo
class Foo {
private var name: String
private var ID: String
//initialize
init(name:String, ID:String){
self.name = name
self.ID = ID
}
}
尝试访问
private
变量时会出错。
但是我们可以通过将
private
访问级别更改为 private(set)
来在一行中修复此错误。
//MARK:- Foo
class Foo {
private(set) var name: String
private var ID: String
//initialize
init(name:String, ID:String) {
self.name = name
self.ID = ID
}
}
因此您可以轻松访问私有变量、常量、属性或下标。
//Access class value from Foo
let fooObjc = Foo.init(name: "test", ID: "9900")
print(fooObjc.name)
使用
fileprivate(set)
、private(set)
和 internal(set)
以与计算属性中的显式 setter 完全相同的方式更改此合成 setter 的访问级别。
此属性可以读取,但不能从外部设置。
参考:点击链接了解更多
private (set) var
的目的是限制对内部范围的写访问,但仍然允许外部读访问。
变量在内部是可读可写的。
private (set) var
将写入访问限制为仅内部,同时允许外部读取访问。
例如:
private var
无法从外部访问
class NameNotAccessible {
private var name: String?
}
var person = NameNotAccessible()
print(person.name) // ERROR - access level will not allow
private (set) var
允许外部读取访问,但仅限内部写入访问
class NameAccessible {
private (set) var name: String?
}
var person2 = NameAccessible()
print(person2.name) // external access allowed
person2.name = "Jacob" // ERROR - cannot write it externally
谢谢@Sivabalaa Jothibose 和@craft 它对我有用,非常感谢您的帮助。
此外,如果您希望此 var 公开可读(Objective-C 和 Swift)并且私下可设置,那么您可以执行以下操作:
@objc public private(set) var myVar: String = ""