2014-06-16 104 views
1

我在調用類本身內的實例方法時遇到問題。如果有人能夠提供我一些見解,將不勝感激。 我當前的代碼如下所示:如何使用Swift在類內調用實例方法

class Rect 
{ 
func printthis() -> String { 
    return "this is working or what" 
} 

var toPrint:String = self.printthis() 

} 

我在Xcode得到的錯誤是:無法解析的標識符「自我」的使用。

我在這裏錯過了什麼?

+0

從未見過迅捷,但我猜測它必須是一個靜態方法,如果你分配給類變量。 – KevinDTimm

+0

它不是一個類變量,它是一個實例變量。 –

回答

1

一個類的實例沒有初始化,能夠引用(甚至「自我」),直到所有的變量都被賦值。

可能適用於您的選項是將您的變量聲明爲隱式解包的可選項,默認情況下賦值爲nil。然後在該類的init方法中,由於所有變量都被賦值,因此您可以開始在您的實例上調用方法。

class Rect { 
    var toPrint: String! 

    init() { 
     toPrint = printthis() 
    } 

    printthis() -> String { 
     return "this will work" 
    } 
} 
+0

感謝您指點我在正確的方向,它的工作! – codingbear

3

如果沒有實例,則無法調用實例方法。 class僅僅是實例的模板。所以我不在你這裏試圖做什麼......

但是答案是沒有,你不能調用類定義的實例方法,因爲沒有實例。


也許你想delcare一個方法,並用它來設置上創建一個實例變量?如果是這樣,你可能會這樣做:

class Rect { 
    class func printthis() -> String { 
     return "this is working or what" 
    } 

    var toPrint:String 

    init() { 
     toPrint = Rect.printthis() 
    } 
} 

var r = Rect() 
println(r.toPrint) //-> this is working or what 
+0

第一句話在這裏說明了一點。 (+1) – holex

+1

有一個類似的問題,並根據您的答案嘗試直接將屬性方法分配給沒有'init()'代碼的屬性,它的工作原理是:'var toPrint:String = Rect.printthis()'。 –

+0

是的,這也會工作:) –

2

問題是,swift是嚴格的初始化所有屬性。 您可以作爲一種解決方法

class Rect 
{ 
    func printthis() -> String { 
     return "this is working or what" 
    } 

    var toPrint:String = "" 

    init() { 
     toPrint = printthis() 
    } 

} 
+0

感謝基督徒以及花時間迴應我的問題! – codingbear

相關問題