类变量未设置

时间:2014-06-06 15:55:57

标签: swift

这很奇怪。到目前为止,我在一个测试应用程序中有几个课程,一切都在游泳。但是,当我在下面声明EpisodePlayerController.Type does not have a member named episodeData时,我收到错误otherThing

import UIKit

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

尝试重启Xcode,重启Mac,重新创建课程,重命名课程等。不知所措。可能是我的Xcode安装中的一个错误,但我很想错,而不是等待另一个版本。 ;)

4 个答案:

答案 0 :(得分:0)

这似乎解决了这个问题:

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

    init(){
        otherThing = episodeData
    }
}

看看the property reference

答案 1 :(得分: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()”

答案 2 :(得分: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
    }()
}

通过这种方式,您可以访问自己,因为该属性' otherData'直到' episodeData'才会被呼叫。完全初始化。

答案 3 :(得分:0)

因为这个视图是通过segue调用的,所以我最后将变量设为可选,然后从segue调用一个函数来设置可选变量,然后触发依赖于该变量的任何函数:

import UIKit

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

使用didSet和/或willSet方法可以实现类似效果:

import UIKit

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

另外,作为参考,segue如下所示:

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