2015-06-16 1 views
2

Я реализующие объекты результата с использованием Result, он определяет коробочный результат, как Факультативные с enum:Реализовать Equatable Пустоты (None) типа

public enum Result<T, Error>: Printable, DebugPrintable { 
    case Success(Box<T>) 
    case Failure(Box<Error>) 
    ... 
} 

Протокол Equatable определен для Result выглядит следующим образом:

public func == <T: Equatable, Error: Equatable> (left: Result<T, Error>, right: Result<T, Error>) -> Bool 

Таким образом, T должен соответствовать Equatable.

Я хотел был бы иметь Success что коробки a Void подобный тип. Но, Void не Equatable, как это определено как пустой кортеж:

typealias Void =() 

Цель состоит в том, чтобы быть в состоянии иметь Result типы, где я не заботиться о значении, когда удается.

Возможно ли иметь EquatableVoid (или нет значения)?

Как быстрая мысль, есть возможность создать пустой struct, но я ищу (если возможно) для более элегантного решения.

ответ

1

снова Пытаюсь в Swift 2.0, кажется, что Пустота может быть инициализирована как Void():

public enum Result<T, Error: ErrorType> { 
    case Success(T) 
    case Failure(Error) 

    var value: T? { 
     switch self { 
     case .Success(let v): 
      return v 
     case .Failure(_): 
      return nil 
     } 
    } 

    /// Constructs a success wrapping a `value`. 
    public init(value: T) { 
     self = .Success(value) 
    } 

    /// Constructs a failure wrapping an `error`. 
    public init(error: Error) { 
     self = .Failure(error) 
    } 
} 

enum MyError: ErrorType { 
    case AnError 
} 

let result = Result<Void, MyError>(value: Void()) 

let success = result.value != nil // returns true 
let error = result.value == nil // returns false 
0

Почему бы не сделать успех, содержащий необязательный? (Box<T?> или Box<t>?)?

Вы могли бы вернуть нуль. Недостатком является то, вы бы оставили разворачивая свой результат

+1

AFAIK, как задумано результат, успех * должен * содержать в противном случае это будет считаться ошибкой. Итак, мой вопрос больше касается того, чтобы иметь «Equatable none value non-optional type», для создания перечисления, когда значение не имеет значения. – atxe

+0

Так что ответ отрицательный. Если вы хотите, чтобы успех возвращался в квадратную форму, пустота не соответствует требованию. Как вы говорите, пустой кортеж не соответствует уравновешенному. –

Смежные вопросы