No se puede usar el protocolo como tipo asociado en otro protocolo en Swift

Tengo un protocoloAddress, que hereda de otro protocolo,ValidatoryAddress cumple elValidator requisito en la extensión.

Hay otro protocolo,FromRepresentable, que tiene unassociatedType (ValueWrapper) requisito que debería serValidator.

Ahora si trato de usarAddress comoassociatedType, entonces no se compila. Dice,

El tipo inferido 'Dirección' (al hacer coincidir el requisito 'valueForDetail') no es válido: no se ajusta al 'Validador'.

¿Es ilegal este uso? ¿No deberíamos poder usarAddress en lugar deValidator, como todoAddresses sonValidator.

A continuación se muestra el código que estoy intentando.

enum ValidationResult {
    case Success
    case Failure(String)
}

protocol Validator {
    func validate() -> ValidationResult
}

//Address inherits Validator
protocol Address: Validator {
    var addressLine1: String {get set}
    var city: String {get set}
    var country: String {get set}
}

////Fulfill Validator protocol requirements in extension
extension Address {
    func validate() -> ValidationResult {
        if addressLine1.isEmpty {
            return .Failure("Address can not be empty")
        }
        return .Success
    }
}

protocol FormRepresentable {
    associatedtype ValueWrapper: Validator
    func valueForDetail(valueWrapper: ValueWrapper) -> String
}


// Shipping Address conforming to Address protocol. 
// It should also implicitly conform to Validator since
// Address inherits from Validator?
struct ShippingAddress: Address {
    var addressLine1 = "CA"
    var city = "HYD"
    var country = "India"
}


// While compiling, it says:
// Inferred type 'Address' (by matching requirement 'valueForDetail') is invalid: does not conform
// to 'Validator'.
// But Address confroms to Validator.
enum AddressFrom: Int, FormRepresentable {
    case Address1
    case City
    case Country

    func valueForDetail(valueWrapper: Address) -> String {
        switch self {
        case .Address1:
            return valueWrapper.addressLine1
        case .City:
            return valueWrapper.city
        case .Country:
            return valueWrapper.country
        }
    }
}

Actualizar: Archivó unerror.

Respuestas a la pregunta(2)

Su respuesta a la pregunta