protocol Engine {
func setSpeed(speed: Double)
}
struct Car: Engine {
let speed: Double
func setSpeed(speed: Double) {
self.speed = speed
}
}
class RandomViewController: UIViewController {
let engine: Engine
}
我看到一个人在Swift中演示了面向协议的视频,我接受了它。这个人做了这样的事情,似乎没有错误。
我得到错误类'RandomViewController'没有初始化器。我在哪里?有人可以纠正我并指出我正确的方向吗?
编辑:视频为https://youtu.be/-g53kYDIpP4?t=611 EDIT2:没听过视频。
答案 0 :(得分:1)
这是因为你声明了一个不是可选的常量而且不会初始化它。
let engine: Engine
你应该用var声明它并使它成为可选项或在你的RandomViewController中写初始化器并在那里初始化你的常量。
<强>更新强>
实施例
protocol Engine {
mutating func setSpeed(speed: Double)
}
struct Car: Engine {
var speed: Double = 0
mutating func setSpeed(speed: Double) {
self.speed = speed
}
}
class ViewController: UIViewController {
let engine:Engine
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
engine = Car(speed: 5);
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
engine = Car(speed: 5);
super.init(coder: aDecoder)
}
}
答案 1 :(得分:0)
将其更改为以下内容并在使用前对其进行初始化:
var engine: Engine!
答案 2 :(得分:0)
问题是我的结构中的变量在全局范围内导致了问题。每当我尝试将协议用作类型时,它就会抱怨它需要初始化。
我不得不解散协议和结构,并以不同的方式组装它以解决我的问题。