Disons que j'ai deux Protocoles non génériques forts> C forts> (1) strong> Je veux avoir un et extension avec la mise en œuvre par défaut de la version non générique pour avoir une conformité gratuite de code à Maintenant, je veux plusieurs classes forts> pour se conformer strong> generic StringProvider code> ( ne fonctionne pas strong>, pls lu ci-dessous) (3) strong> p> typedstringprovider code> et non générique stringprovider code> protocoles extension UIView {
var value: StringValue { return typedValue }
}
extension Double {
var value: StringValue { return typedValue }
}
3 Réponses :
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
}
}
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.
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()
sur StringProvider code> Vous définissez Valeur code> à un StringValue code>: P> extension TypedStringProvider {
var value: StringValue { return typedValue }
}
Peut-être que ma description n'était pas assez claire mais je veux 2 choses: 1. Gardez StringProvider Code> non générique (pourquoi est-ce que j'ai générique typeStringProvider?) 2. Gardez la valeur code> dactylographié (TypeDstringValue , pas un stringvalue)