swift 类型擦除理解,无法将类型 'AnyMapper<Payload, [Post]>' 的值转换为预期的元素类型 'AnyMapper<Payload, User>

问题描述 投票:0回答:0
struct Payload {}
struct User {}
struct Post {}

protocol Mapper {
    associatedtype PayloadType
    associatedtype ResultType
    
    func map(_ payload: PayloadType) -> ResultType
}

class AnyMapper<P, R>: Mapper {
    private var _mapClouser: (P) -> R
    
    init<M: Mapper>(_ mapper: M) where M.PayloadType == P, M.ResultType == R {
        _mapClouser = mapper.map(_:)
    }
    
    func map(_ payload: P) -> R {
        _mapClouser(payload)
    }
}

class UserMapper: Mapper {
    func map(_ payload: Payload) -> User {
        return User()
    }
}

class PostsMapper: Mapper {
    func map(_ payload: Payload) -> [Post] {
        return [Post(), Post(), Post()]
    }
}

let userMapper = AnyMapper(UserMapper())
let postsMapper = AnyMapper(PostsMapper())

var array: [AnyMapper] = [userMapper, postsMapper] <<< Error: Cannot convert value of type 'AnyMapper<Payload, [Post]>' to expected element type 'AnyMapper<Payload, User>'

我试图将 2 个对象放入数组中,但出现此错误:无法将类型“AnyMapper”的值转换为预期的元素类型“AnyMapper

有人可以向我解释如何修复它吗?

arrays swift type-erasure
© www.soinside.com 2019 - 2024. All rights reserved.