这很奇怪。到目前为止,我在一个测试应用程序中有几个课程,一切都在游泳。但是,当我在下面声明EpisodePlayerController.Type does not have a member named episodeData
时,我收到错误otherThing
。
import UIKit
class EpisodePlayerController: UIViewController {
var episodeData = "Hi"
var otherThing = episodeData
}
尝试重启Xcode,重启Mac,重新创建课程,重命名课程等。不知所措。可能是我的Xcode安装中的一个错误,但我很想错,而不是等待另一个版本。 ;)
答案 0 :(得分:0)
这似乎解决了这个问题:
class EpisodePlayerController: UIViewController {
var episodeData = "Hi"
var otherThing = ""
init(){
otherThing = episodeData
}
}
答案 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)
}
}