gpt4 book ai didi

swift - 创建从多个协议(protocol)继承的协议(protocol)类型的对象时出错

转载 作者:可可西里 更新时间:2023-10-31 23:58:59 25 4
gpt4 key购买 nike

在下面的代码中,有3个协议(protocol):WheeledVehicleWheeledVehicle(继承自Wheeled车辆)

protocol Wheeled {
var numberOfWheels: Int { get }
}

protocol Vehicle {
var maker: String { get }
var owner: String {get set}
var ownerKid: String { get }
}

protocol WheeledVehicle: Wheeled, Vehicle {
// simply just combine Wheeled and Vehicle
}

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()

let wheeledVehicleBike: WheeledVehicle = bike //error: value of type 'Bike' does not conform to specified type 'WheeledVehicle'

问题:几乎是错误本身,我不明白,为什么类型 Bike 的值不符合指定类型 WheeledVehicle

非常感谢您的时间和帮助。

最佳答案

基本上:因为不符合

要让编译器知道 Bike 符合 WheeledVehicle,您必须指定它。编译器不会只是假定,因为它们都遵循相同的协议(protocol),所以它们可以相互赋值。

同理下面的不行。

class A { var a : String = "" }
class B { var a : String = "" }

var a : A = A()
var b : B = a // cannot convert value of type 'A' to specified type 'B'

或者更简单

class A {  }
class B { }

var a : A = A()
var b : B = a // cannot convert value of type 'A' to specified type 'B'

编译器不关心这两种类型看起来是否相似 - 它们必须相似

如果您的 WheeledVehicle 添加了一个 func,您的示例中会发生什么情况? Bike 是否不再符合它?

使 Bike 符合 WheeledVehicle唯一方法是显式声明它:class Bike : WheeledVehicle !

关于swift - 创建从多个协议(protocol)继承的协议(protocol)类型的对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37576780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com