Não foi possível usar o protocolo como tipo associado em outro protocolo no Swift

Eu tenho um protocoloAddress, que herda de outro protocolo,ValidatoreAddress cumpre oValidator requisito na extensão.

Existe outro protocolo,FromRepresentable, que tem umassociatedType (ValueWrapper) requisito que deve serValidator.

Agora, se eu tentar usarAddress ComoassociatedType, então não compila. Diz,

O tipo inferido 'Endereço' (correspondendo ao requisito 'valueForDetail') é inválido: não está em conformidade com 'Validador'.

Esse uso é ilegal? Não deveríamos ser capazes de usarAddress no lugar deValidator, como tudoAddresses estãoValidator.

Abaixo está o trecho de código que estou tentando.

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
        }
    }
}

Atualizar: Arquivado umerro.

questionAnswers(2)

yourAnswerToTheQuestion