Optional.swift 906 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //
  2. // Optional.swift
  3. // ReactiveSwift
  4. //
  5. // Created by Neil Pankey on 6/24/15.
  6. // Copyright (c) 2015 GitHub. All rights reserved.
  7. //
  8. /// An optional protocol for use in type constraints.
  9. public protocol OptionalProtocol {
  10. /// The type contained in the otpional.
  11. associatedtype Wrapped
  12. init(reconstructing value: Wrapped?)
  13. /// Extracts an optional from the receiver.
  14. var optional: Wrapped? { get }
  15. }
  16. extension Optional: OptionalProtocol {
  17. public var optional: Wrapped? {
  18. return self
  19. }
  20. public init(reconstructing value: Wrapped?) {
  21. self = value
  22. }
  23. }
  24. extension SignalProtocol {
  25. /// Turns each value into an Optional.
  26. internal func optionalize() -> Signal<Value?, Error> {
  27. return map(Optional.init)
  28. }
  29. }
  30. extension SignalProducerProtocol {
  31. /// Turns each value into an Optional.
  32. internal func optionalize() -> SignalProducer<Value?, Error> {
  33. return lift { $0.optionalize() }
  34. }
  35. }