这是点示例介绍由apple提供的pint结构setter getter如何才能使setter私有
struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
答案 0 :(得分:17)
在docs中,在“Getters and Setters”标题下的第一个代码示例中,您可以看到要拥有私有的setter,语法如下所示:
private (set) var center: Point {...
一些澄清:
Swift中的private
工作方式略有不同 - 它将对属性/方法的访问限制在文件范围内。只要文件中有多个类,他们就能访问所有内容。为了使private
“工作”,您需要将您的classess放在单独的文件中。
答案 1 :(得分:1)
您可以按如下方式细化struct Rect。这将允许您只获得中心但不设置它。
struct Rect {
var center:Point {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
var origin = Point()
var size = Size()
}
答案 2 :(得分:0)
解决方案#1
struct A {
private var a: String
public init(a: String) {
self.a = a
}
func getA() -> String {
return a
}
}
let field = A(a:"a")
field.getA()
解决方案2
struct A {
private(set) var a: String
public init(a: String) {
self.a = a
}
}
let field = A(a:"a")
field.a