無法在Swift中的另一個協(xié)議中使用協(xié)議作為關(guān)聯(lián)類型我有一個協(xié)議,Address它繼承自另一個協(xié)議Validator,并Address滿足Validator擴(kuò)展中的要求。還有另一個協(xié)議,F(xiàn)romRepresentable它有一個associatedType(ValueWrapper)要求Validator?,F(xiàn)在,如果我嘗試使用Addressas associatedType,那么它不會編譯。它說,推斷類型'Address'(通過匹配要求'valueForDetail')無效:不符合'Validator'。這種用法是非法的嗎?我們是不是應(yīng)該能夠使用Address的地方Validator,因為所有Addresses都是Validator。下面是我正在嘗試的一段代碼。enum ValidationResult {
case Success
case Failure(String)}protocol Validator {
func validate() -> ValidationResult}//Address inherits Validatorprotocol Address: Validator {
var addressLine1: String {get set}
var city: String {get set}
var country: String {get set}}////Fulfill Validator protocol requirements in extensionextension 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 }
}}更新:提起了一個錯誤。
- 2 回答
- 0 關(guān)注
- 599 瀏覽
添加回答
舉報
0/150
提交
取消