swift 函数泛型和类型约束

xfb7svmp  于 2023-04-19  发布在  Swift
关注(0)|答案(1)|浏览(102)

考虑下面的层次结构

public protocol Entity{
    
    associatedtype T
    
    var id:T  { get set }       
}

open class EntityBase<T>: Entity
{
    public var id:T
}

class Car: EntityBase<Int8>
{
    var test : String
}

和通用函数:

public func foo<T:AnyObject, Tkey: Any>(id: Any) throws -> T? where T: (Entity){

}

我正在寻找的是泛型函数foo将'Tkey'类型约束为与Entity 'id'属性类型相同的类型(将是Int8)
我已经将'T'的约束设置为'Entity'对象,但如何将'Tkey'约束为Entity的id类型?

huwehgph

huwehgph1#

如果为了清楚起见,我们将协议中的关联类型重命名为

public protocol Entity: AnyObject {
    associatedtype IDType

    var id:IDType  { get set }
}

那么函数签名可以写成

public func foo<ReturnType>(id: ReturnType.IDType) throws -> ReturnType? where ReturnType: Entity

相关问题