这是点示例介绍由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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
Los*_*aty 17
在文档中,在"Getters and Setters"标题下的第一个代码示例中,您可以看到要拥有私有setter,语法如下所示:
private (set) var center: Point {...
Run Code Online (Sandbox Code Playgroud)
一些澄清:
private在Swift中工作方式略有不同 - 它将对属性/方法的访问限制在文件范围内.只要文件中有多个类,他们就能访问所有内容.为了private"工作",您需要将您的classess放在单独的文件中.
yoA*_*ex5 13
Swift 私人二传手
解决方案#1 使用公共函数
struct MyStruct {
private var a: String
init(a: String) {
self.a = a
}
func getA() -> String {
return a
}
}
let myStruct = MyStruct(a: "Hello World")
let a = myStruct.getA()
Run Code Online (Sandbox Code Playgroud)
解决方案 #2 使用私有 setter。在这种情况下,setter 的访问级别低于 geter
struct MyStruct {
private(set) var a: String
init(a: String) {
self.a = a
}
}
let myStruct = MyStruct(a: "Hello World")
let a = myStruct.a
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式细化 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()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5130 次 |
| 最近记录: |