以不同的方法初始化属性
Initializing attributes in a different method
我有一个 class 并使用默认值初始化属性:
class Point {
var x : Int
var y : Int
public init() {
x = 1
y = 1
}
}
现在我想要一个将属性设置为这些默认值的 reset() 方法。因为我想防止冗余,所以我尝试将行从初始化程序移动到重置方法并从 init:
调用此方法
class Point {
var x : Int
var y : Int
public init() {
reset()
}
public func reset() {
x = 1
y = 1
}
}
但是没用。它说必须初始化属性。我该如何解决这个问题?
像下面这样声明你的属性是可选的。
class Point {
var x : Int!
var y : Int!
public init() {
reset()
}
public func reset() {
x = 1
y = 1
}
}
实际上,您可以在 属性 声明中提供默认值:
class Point {
var x: Int = 1
var y: Int = 1
public init() {
// No need to reset x & y
// You can event omit init alltogether, if all properties have default values...
}
public func reset() {
x = 1
y = 1
}
}
您可以在声明时初始化您的属性
class Point {
var x : Int = 1
var y : Int = 1
public init() {
}
public func reset() {
x = 1
y = 1
}
虽然增加了一些重复,但绝对能解决你的问题
你完全可以跳过初始化…
class Point {
var x = 1
var y = 1
public func reset() {
x = 1
y = 1
}
}
您可以有两个私有 type 成员,它们保存 x
和 y
属性的默认值,并将它们用作默认参数值您的初始化器(以及在重置 Point
实例时使用它们):
class Point {
static private let xDefault = 1
static private let yDefault = 1
var x: Int
var y: Int
public init(x: Int = Point.xDefault, y: Int = Point.yDefault) {
self.x = x
self.y = y
}
public func reset() {
x = Point.xDefault
y = Point.yDefault
}
}
let p1 = Point()
print(p1.x, p1.y) // 1 1
let p2 = Point(y: 2)
print(p2.x, p2.y) // 1 2
p2.reset()
print(p2.x, p2.y) // 1 1
let p3 = Point(x: -1, y: 2)
print(p3.x, p3.y) // -1 2
p3.reset()
print(p3.x, p3.y) // 1 1
我有一个 class 并使用默认值初始化属性:
class Point {
var x : Int
var y : Int
public init() {
x = 1
y = 1
}
}
现在我想要一个将属性设置为这些默认值的 reset() 方法。因为我想防止冗余,所以我尝试将行从初始化程序移动到重置方法并从 init:
调用此方法class Point {
var x : Int
var y : Int
public init() {
reset()
}
public func reset() {
x = 1
y = 1
}
}
但是没用。它说必须初始化属性。我该如何解决这个问题?
像下面这样声明你的属性是可选的。
class Point {
var x : Int!
var y : Int!
public init() {
reset()
}
public func reset() {
x = 1
y = 1
}
}
实际上,您可以在 属性 声明中提供默认值:
class Point {
var x: Int = 1
var y: Int = 1
public init() {
// No need to reset x & y
// You can event omit init alltogether, if all properties have default values...
}
public func reset() {
x = 1
y = 1
}
}
您可以在声明时初始化您的属性
class Point {
var x : Int = 1
var y : Int = 1
public init() {
}
public func reset() {
x = 1
y = 1
}
虽然增加了一些重复,但绝对能解决你的问题
你完全可以跳过初始化…
class Point {
var x = 1
var y = 1
public func reset() {
x = 1
y = 1
}
}
您可以有两个私有 type 成员,它们保存 x
和 y
属性的默认值,并将它们用作默认参数值您的初始化器(以及在重置 Point
实例时使用它们):
class Point {
static private let xDefault = 1
static private let yDefault = 1
var x: Int
var y: Int
public init(x: Int = Point.xDefault, y: Int = Point.yDefault) {
self.x = x
self.y = y
}
public func reset() {
x = Point.xDefault
y = Point.yDefault
}
}
let p1 = Point()
print(p1.x, p1.y) // 1 1
let p2 = Point(y: 2)
print(p2.x, p2.y) // 1 2
p2.reset()
print(p2.x, p2.y) // 1 1
let p3 = Point(x: -1, y: 2)
print(p3.x, p3.y) // -1 2
p3.reset()
print(p3.x, p3.y) // 1 1