0
votes

Conformité du protocole Downcast dans l'extension

Disons que j'ai deux Protocoles non génériques forts> C forts> (1) strong> xxx pré>

Je veux avoir un générique forte> version du second (2) fort> p> xxx pré>

et extension avec la mise en œuvre par défaut de la version non générique pour avoir une conformité gratuite de code à StringProvider code> ( ne fonctionne pas strong>, pls lu ci-dessous) (3) strong> p> xxx pré>

Maintenant, je veux plusieurs classes forts> pour se conformer strong> generic typedstringprovider code> et non générique stringprovider code> protocoles (4 ) strong> p>

extension UIView {
    var value: StringValue { return typedValue }
}

extension Double {
    var value: StringValue { return typedValue }
}


0 commentaires

3 Réponses :


0
votes

valeur code> est défini comme type StringValue code>, c'est donc le type que vous devez spécifier dans votre extension de TypeDstringProvider code> afin de compléter le protocole Conforme:

extension TypedStringProvider {
    var value: StringValue {
        return typedValue
    }
}


1 commentaires

Ouais je sais. Je l'ai écrit sous (4). Mais le problème ici que j'ai besoin d'une propriété dactylographiée pour appeler ses méthodes.



0
votes

Solution trouvée

protocol StringValue {
    var asString: String {get}
}

protocol StringProvider {
    var value: StringValue {get}
}

protocol TypedStringProvider: StringProvider {
    associatedtype TypedStringValue: StringValue
    var typedValue: TypedStringValue { get }
}

extension StringProvider where Self: TypedStringProvider {
    var value: StringValue { return typedValue }
}

extension TypedStringProvider {
    var value: TypedStringValue { return typedValue }
}

extension UIView: TypedStringProvider {
    typealias TypedStringValue = String
    var typedValue: String { return "some string" }
}

extension Double: TypedStringProvider {
    typealias TypedStringValue = String
    var typedValue: String { return String(self) }
}

extension String: StringValue {
    var asString: String { return self }
}

let doubleValue = 0.5.value.lowercased()


0 commentaires

0
votes

Problème

sur StringProvider code> Vous définissez Valeur code> à un StringValue code>: P>

extension TypedStringProvider {
    var value: StringValue { return typedValue }
}


1 commentaires

Peut-être que ma description n'était pas assez claire mais je veux 2 choses: 1. Gardez StringProvider non générique (pourquoi est-ce que j'ai générique typeStringProvider?) 2. Gardez la valeur dactylographié (TypeDstringValue , pas un stringvalue)