2014-06-06 146 views
0

這是一個奇怪的。到目前爲止,我已經在一個測試應用程序中進行了幾個課程,並且所有內容都一直在流行但是,我在下面聲明otherThing時收到錯誤EpisodePlayerController.Type does not have a member named episodeData類別變量未設置

import UIKit 

class EpisodePlayerController: UIViewController { 
    var episodeData = "Hi" 
    var otherThing = episodeData 
} 

嘗試重新啓動Xcode,重新啓動Mac,重新創建類,重命名類,等等。可能是我的Xcode安裝中的一個錯誤,但我很想錯,而不是等待另一個版本。 ;)

+0

那些不是類變量。他們是實例變量。使用'init'ializer來做到這一點(或者用缺省數據創建一個類變量/常量,然後初始化引用類變量的實例變量)。 –

回答

0

由於此視圖正在經由SEGUE叫,我卷繞使變量可選的,並且然後從SEGUE調用一個函數來設置可選的變量,然後觸發依賴於該變量的任何函數:

import UIKit 

class YourController: UIViewController { 
    var yourData:NSString? 
    func setYourData(value:NSString) { 
     self.yourData = value 
     dependentFunction() 
} 

import UIKit 

class YourController: UIViewController { 
    var yourData:NSString? { 
     didSet { 
      // Dependent functionality 
     } 
    } 
    func setYourData(value:NSString) { 
     self.yourData = value 
} 

另外,作爲參考,在SEGUE看起來像這樣::

可以使用 didSet和/或 willSet方法來實現

類似的效果

func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if segue.identifier == "yourSegue" { 
     var destination:YourController = segue.destinationViewController as YourController 
     destination.setYourData(someData) 
    } 
} 
+0

感覺好像有些東西從代碼中遺失了...... 我嘗試了數字變體,但仍無法使其工作。你可以看看嗎? – KennyVB

0

這似乎是解決問題:

class EpisodePlayerController: UIViewController { 
var episodeData = "Hi" 
var otherThing = "" 

    init(){ 
     otherThing = episodeData 
    } 
} 

the property reference看看。

+0

根據我的經驗,您不需要(也不能)在init方法中使用'func'關鍵字。 –

+0

在我的情況下似乎沒有問題,但我會編輯它。 – 68cherries

+0

我認爲你是對的,@David。從上面的'init'方法中刪除'func'會導致關於'super.init'的錯誤。我早些時候開始了這個兔子洞,但它似乎是一個奇怪的方式,必須做一些如此簡單的事情。 – Sneagan

0

我認爲這段代碼會有所幫助。

class Square: NamedShape { 
     var sideLength: Double 

    init(sideLength: Double, name: String) { 
     self.sideLength = sideLength 
     super.init(name: name) 
     numberOfSides = 4 
    } 

    func area() -> Double { 
     return sideLength * sideLength 
    } 

    override func simpleDescription() -> String { 
     return "A square with sides of length \(sideLength)." 
    } 
} 
let test = Square(sideLength: 5.2, name: "my test square") 
test.area() 
test.simpleDescription()」 
+0

設置Object.episodeData時,會導致錯誤「Expected declaration」。 :/ – Sneagan

+0

檢查此代碼並告訴我.. –

0

問題是,就Swift而言,在類完全初始化之前,沒有任何屬性具有值。在這之前,你無法隱式地與'自我'互動。 (這包括它的特性和功能。)我覺得你的類是@lazy屬性一個很好的候選人:

import UIKit 

class EpisodePlayerController: UIViewController { 
    var episodeData: String = "Hi" 
    @lazy var otherData: String = self.episodeData 
} 

你也可以包括更復雜的東西,如果你需要:

import UIKit 

class ClassTwo { 
    var episodeData = "Hi" 
    @lazy var otherData: String = { 
     // Additional parameters 
     return self.episodeData 
    }() 
} 

這樣,你可以訪問自己,因爲直到'episodeData'完全初始化之前,屬性'otherData'不會被調用。