我只問自己,爲什麼我不能在斯威夫特做這樣的事情直接在我的類聲明:問題與斯威夫特宣言
let width = 200.0
let height = 30.0
let widthheight = width-height
我不能創建與其他2個常數不變。如果我在一個函數/方法中使用這一切,一切工作正常。
感謝
我只問自己,爲什麼我不能在斯威夫特做這樣的事情直接在我的類聲明:問題與斯威夫特宣言
let width = 200.0
let height = 30.0
let widthheight = width-height
我不能創建與其他2個常數不變。如果我在一個函數/方法中使用這一切,一切工作正常。
感謝
當你寫let widthheight = width - height
,這隱含意味着let widthheight = self.width - self.height
。在Swift中,你只是被禁止使用self
,直到其所有成員都被初始化 - 在這裏,包括widthheight
。
你有一個init
方法多一點靈活性,不過,在這裏你可以這樣寫:
class Rect {
let width = 200.0
let height = 30.0
let widthheight: Double
let widthheightInverse: Double
init() {
// widthheightInverse = 1.0/widthheight // widthheight not usable yet
widthheight = width - height
widthheightInverse = 1.0/widthheight // works
}
}
對於這樣的事情,你可以利用類變量。該代碼是這樣的:
class var width = 200.0
class var height = 30.0
class var widthheight = width - height
但是當你嘗試一下,你會看到一個編譯器錯誤:
Class variables are not yet supported
我想他們還沒有實現該功能呢。但現在有一個解決方案。只要將你的聲明類的聲明之外,像下面:
let width = 200.0
let height = 30.0
let widthheight = width - height
class YourClass { ...
我認爲你正在混合不同的概念,不解決OP的問題。 –
以多種語言使用靜態(類)變量和常量是一種很好的做法。它確實解決了OP的問題,而不會覆蓋任何方法。 – Adam
如果OP試圖對對象的字段/屬性進行建模:static/class字段不合適,並且都不是全局變量。 –
這是一個計算性能這樣的候選人:
class Foo {
let width = 200.0
let height = 30.0
var widthheight : Double { return width - height }
}
你可能會提高「的問題,但它的計算每一次';也許你的應用程序將取決於重複做一次減法 - 但不太可能。如果減法是一個問題,請將widthheight
設置爲init()
您得到的錯誤是什麼?它在這裏工作。 – Mani
更好閱讀此https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-XID_1 –
@Mani The OP意味着它**在課堂**內。 –