je protocole de cadreProtocole de classe: ne peut pas utiliser membre muter sur la valeur immuable: « soi » est immuable
public protocol BaseMappable {
/// This function is where all variable mappings should occur. It is executed by Mapper during the mapping (serialization and deserialization) process.
mutating func mapping(map: Map)
}
et j'ai mon protocole avec extension (implémentation par défaut)
public protocol DtoResponseRequestActionable: class {
func transferToResponceAction(_ dto: TransferToResponce)
}
extension DtoResponseRequestActionable where Self: BaseMappable {
func transferToResponceAction(_ dto: TransferToResponce) {
var map = Map(mappingType: .toJSON, JSON: [:])
dto.transfering(map: map)
let json = map.JSON
map = Map(mappingType: .fromJSON, JSON: json)
mapping(map: map) // <<< ERROR
}
}
mais J'ai une erreur
Impossible d'utiliser un membre en mutation sur une valeur immuable: 'self' est immuable
Comment je peux le réparer, par défaut imp. Si je copie/colle le code de l'extension à chaque classe, cela fonctionne bien, mais j'ai besoin d'un défaut par défaut. Des solutions?
'virus' est pas valable sur les méthodes de classes ou protocoles liés à une classe –
Swift ne peut pas gérer les exigences de classe de mélange de cette façon. Vous devrez déplacer l'exigence 'class' vers' BaseMappable'. Le fait que vous ayez marqué 'where Self: BaseMappable' ne prolonge pas suffisamment la" classe-ness ". Vous devez soit marquer cette fonction 'mutating', soit supprimer' mutating' de 'mapping'. Vous devez donc supprimer 'class' ou l'agrandir. Ce n'est pas pour des raisons profondes et intentionnelles. Swift ne peut tout simplement pas le faire. –
Pour plus d'informations sur cette erreur, voir https://www.bignerdranch.com/blog/protocol-oriented-problems-and-the-immutable-self-error/ –