爲什麼我不能在類級別執行具有變量或常量的操作?這是不允許的或者是否有我需要用來訪問它們的關鍵字?這是不好的做法嗎?如何訪問類常量和變量
控制器:
class ViewController: UIViewController {
let one = 1
let two = 2
var sum = one + two
}
錯誤:
ViewController.Type does not have a member named 'one'
爲什麼我不能在類級別執行具有變量或常量的操作?這是不允許的或者是否有我需要用來訪問它們的關鍵字?這是不好的做法嗎?如何訪問類常量和變量
控制器:
class ViewController: UIViewController {
let one = 1
let two = 2
var sum = one + two
}
錯誤:
ViewController.Type does not have a member named 'one'
類的變量和常量必須static
,例如static let one = 1
。
這裏只需要兩個let
常量爲static
,以便它們可用於初始化類和實例變量。以下適用於我:
class MyClass {
static let one = 1
static let two = 2
static var sum = one + two
var instanceProduct = one * two
}
MyClass.one
MyClass.sum
MyClass().instanceProduct
請注意,在上面的例子中,你可以做MyClass.sum = 5
。如果你的意思是保持不變,只需將它改爲static let sum = one + two
即可。
要求是您在任何函數和閉包之外使用的常量被聲明爲static let
。這意味着他們對於整個班級都是真正的不變的。如果您需要特定實例的常量,你不能使用它們的功能或者關閉外(如你已經注意到) - 作爲一種解決方法可變sum
我建議一個lazy
變量由封閉初始化:
class MyClass {
let one: Int // value given in `init`
let two = 2
lazy var sum: Int = { self.one + self.two }()
init(one: Int = 1) {
self.one = one
}
}
MyClass().sum // 3
MyClass(one: 2).sum // 4
放sum = one + two,in viewDidLoad或者類似的 – DogCoffee
你可以在類級聲明變量,併爲它們分配初始值,但是你不能在函數之外擁有任意代碼 – Paulw11
@ Paulw11存儲數據的首選方法是什麼一個函數,以便它可用於類中的每個方法? –