In dem Code zu ändern, die Wheeled
und Vehicle
Protokolle sind, die Bike
Klasse entspricht die Protokolle sowohl derNicht imstande Protokollkonformität eines Objekt
protocol Wheeled {
var numberOfWheels: Int { get }
}
protocol Vehicle {
var maker: String { get }
var owner: String {get set}
var ownerKid: String { get }
}
class Bike: Vehicle, Wheeled {
let numberOfWheels: Int = 0
var ownerKid: String = "Junior"
var maker: String {
return "Ford"
}
var owner: String {
get {
return "Bob"
}
set {
ownerKid = "\(newValue) Junior"
}
}
}
let bike: Bike = Bike()
var theBike: Vehicle = bike // #1
var theBike: Wheeled = bike // #2 error: invalid redeclaration of 'theBike'
Wenn ich die Eigenschaften von theBike
überprüfen, in # 1, theBike
Objekt nur die Eigenschaften entsprechen dem Vehicle
Protokoll; während in # 2 theBike
Objekt hat nur die Eigenschaften der Wheeled
Eigenschaften
Daher entsprechen, fühle ich mich theBike
in # 1 und # 2 ist anders, warum es mich, dass die ungültige Neudeklaration erzählt?
Frage: Wie soll ich die Protokollkonformität eines Objekts ändern? Oder ist es erlaubt, die Konformität eines Objekts zu ändern?
Schätzen Sie Ihre Zeit und Hilfe.
Es hat nichts mit Protokollen zu tun - Sie haben nur zwei identisch benannte lokale Variablen. Das ist ungültig. – Hamish
, weil Sie eine Variable mit demselben Namen ein zweites Mal deklarieren, was nicht erlaubt ist. – luk2302
'var theBike2: Wheeled = bike' behebt es. – luk2302