首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift dynamicType不适用于泛型函数

Swift dynamicType不适用于泛型函数
EN

Stack Overflow用户
提问于 2015-08-25 07:40:01
回答 1查看 123关注 0票数 0

说我有个规矩:

代码语言:javascript
复制
protocol VehicleModel {...}

它由许多不同的结构实现。(例如CarModel、TruckModel等)我有一个通用的方法来获得车辆的‘模型标识’。

代码语言:javascript
复制
func modelIdentifierForVehicle<V: VehicleModel>(vehicleType: V.Type) -> String {
  return "\(vehicleType)"
}

如果我叫modelIdentifierForVehicle(CarModel.self),它就会返回"Car“。但是,如果我有一个VehicleModel的多态集合,并且我试图在每个集合上调用modelIdentifierForVehicle(model.dynamicType),Xcode说“不能用类型的参数列表(VehicleModel.Type)调用'modelIdentifierForVehicle‘”为什么?我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 12:57:49

由于您只是将vehicleType转换为modelIdentifierForVehicle中的一个String,所以我会争论为什么您需要使用约束VVehicleModel,甚至根本不需要使用泛型:

代码语言:javascript
复制
func typeIdentifier(t: Any.Type) -> String {
    return "\(t)"
}  

let vehicles: [VehicleModel.Type] = [CarModel.self, TruckModel.self]
typeIdentifier(vehicles[0]) // CarModel

如果有需要使用VehicleModel的原因,假设VehicleModel不使用Self或关联类型需求,则可以:

代码语言:javascript
复制
func modelIdentifierForVehicle(vehicleType: VehicleModel.Type) -> String {
    return "\(vehicleType)"
}

如果使用Swift 2,则可以使用协议扩展:

代码语言:javascript
复制
extension VehicleModel {
    static var modelIdentifier: String {
        return "\(self.dynamicType)"
    }
}

// The array from earlier.
vehicles[1].modelIdentifier // TruckModel.Type
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32198189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档