gpt4 book ai didi

ios - 使用 swift 转换具有泛型参数的结构

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:59 24 4
gpt4 key购买 nike

我正在尝试执行以下操作。

protocol Vehicle {

}

class Car : Vehicle {

}

class VehicleContainer<V: Vehicle> {

}

let carContainer = VehicleContainer<Car>()
let vehicleContainer = carContainer as VehicleContainer<Vehicle>

但是我在最后一行得到了编译错误:

'Car' is not identical to 'Vehicle' 

有解决办法吗?

此外,我相信这种类型的转换应该是可行的,因为我可以使用基于泛型构建的数组来实现。以下作品:

let carArray = Array<Car>()
let vehicleArray = carArray as Array<Vehicle>

最佳答案

在 playground 中快速扩展你的数组示例按预期工作

protocol Vehicle {

}

class Car : Vehicle {

}

class Boat: Vehicle {

}

var carArray = [Car]()
var vehicleArray : [Vehicle] = carArray as [Vehicle]
vehicleArray.append(Car()) // [__lldb_expr_183.Car]
vehicleArray.append(Boat()) // [__lldb_expr_183.Car, __lldb_expr_183.Boat]

没有对 swift 泛型做太多工作,但快速查看 swift docs

struct Stack<T: Vehicle> {
var items = [Vehicle]()
mutating func push(item: Vehicle) {
items.append(item)
}
mutating func pop() -> Vehicle {
return items.removeLast()
}
}

并使用车辆代替通用类型 T

var vehicleStack = Stack<Vehicle>()
vehicleStack.push(Car())
vehicleStack.push(Boat())
var aVehicle = vehicleStack.pop()

似乎可以在应用程序中编译 aok(尽管 playground 在处理它时存在一些问题)

关于ios - 使用 swift 转换具有泛型参数的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929210/

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