0001 // Result.swift 0002 // 0003 // Copyright (c) 2015 Jens Ravens (http://jensravens.de) 0004 // 0005 // Permission is hereby granted, free of charge, to any person obtaining a copy 0006 // of this software and associated documentation files (the "Software"), to deal 0007 // in the Software without restriction, including without limitation the rights 0008 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 0009 // copies of the Software, and to permit persons to whom the Software is 0010 // furnished to do so, subject to the following conditions: 0011 // 0012 // The above copyright notice and this permission notice shall be included in 0013 // all copies or substantial portions of the Software. 0014 // 0015 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 0016 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 0017 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 0018 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 0019 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 0020 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 0021 // THE SOFTWARE. 0022 0023 0024 /** 0025 A result contains the result of a computation or task. It might be either successfull 0026 with an attached value or a failure with an attached error (which conforms to Swift 2's 0027 ErrorType). You can read more about the implementation in 0028 [this blog post](http://jensravens.de/a-swifter-way-of-handling-errors/). 0029 */ 0030 public enum Result<T
Debounce.swift:52 func updateIfNeeded(signal: Signal<T>) -> Result<T> -> Void {Result.swift:38 self = Success(value)Result.swift:45 self = Error(error)Result.swift:52 public func map<U>(@noescape f: T -> U) -> Result<U> {Result.swift:63 public func map<U>(f:(T, (U->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:78 public func flatMap<U>(@noescape f: T -> Result<U>) -> Result<U> {Result.swift:78 public func flatMap<U>(@noescape f: T -> Result<U>) -> Result<U> {Result.swift:89 public func flatMap<U>(@noescape f: T throws -> U) -> Result<U> {Result.swift:102 public func flatMap<U>(f:(T, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:102 public func flatMap<U>(f:(T, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:115 public func ensure<U>(@noescape f: Result<T> -> Result<U>) -> Result<U> {Result.swift:115 public func ensure<U>(@noescape f: Result<T> -> Result<U>) -> Result<U> {Result.swift:115 public func ensure<U>(@noescape f: Result<T> -> Result<U>) -> Result<U> {Result.swift:123 public func ensure<U>(f:(Result<T>, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:123 public func ensure<U>(f:(Result<T>, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:123 public func ensure<U>(f:(Result<T>, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:166 public func ?? <T> (result: Result<T>, @autoclosure defaultValue: () -> T) -> T {Signal.swift:49 private var value: Result<T>?Signal.swift:50 private var callbacks: [Result<T> -> Void] = []Signal.swift:77 public func flatMap<U>(f: T -> Result<U>) -> Signal<U> {Signal.swift:99 public func flatMap<U>(f: (T, (Result<U>->Void))->Void) -> Signal<U> {Signal.swift:133 public func ensure<U>(f: (Result<T>, (Result<U>->Void))->Void) -> Signal<U> {Signal.swift:133 public func ensure<U>(f: (Result<T>, (Result<U>->Void))->Void) -> Signal<U> {Signal.swift:145 public func subscribe(f: Result<T> -> Void) -> Signal<T> {Signal.swift:230 public func update(result: Result<T>) {Threading.swift:34 public static func main<T>(a: Result<T>, completion: Result<T>->Void) {Threading.swift:34 public static func main<T>(a: Result<T>, completion: Result<T>->Void) {Threading.swift:42 public static func queue<T>(queue: dispatch_queue_t) -> (Result<T>, Result<T>->Void) -> Void {Threading.swift:42 public static func queue<T>(queue: dispatch_queue_t) -> (Result<T>, Result<T>->Void) -> Void {Threading.swift:54 public static func background<T>(a: Result<T>, completion: Result<T>->Void) {Threading.swift:54 public static func background<T>(a: Result<T>, completion: Result<T>->Void) {Waiting.swift:50 var result: Result<T>?> { 0031 case Success
Result.swift:31 case Success(T)Result.swift:37 public init(success value: T) {Result.swift:52 public func map<U>(@noescape f: T -> U) -> Result<U> {Result.swift:63 public func map<U>(f:(T, (U->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:78 public func flatMap<U>(@noescape f: T -> Result<U>) -> Result<U> {Result.swift:89 public func flatMap<U>(@noescape f: T throws -> U) -> Result<U> {Result.swift:102 public func flatMap<U>(f:(T, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:115 public func ensure<U>(@noescape f: Result<T> -> Result<U>) -> Result<U> {Result.swift:123 public func ensure<U>(f:(Result<T>, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void {Result.swift:133 public var value: T? {Result.swift:154 public func get() throws -> T {(T) 0032 case Error
Result.swift:38 self = Success(value)Result.swift:54 case let .Success(v): return .Success(f(v))Result.swift:54 case let .Success(v): return .Success(f(v))Result.swift:66 case let .Success(v): f(v){ transformed inResult.swift:67 g(.Success(transformed))Result.swift:80 case let .Success(v): return f(v)Result.swift:92 return .Success(try f(t))Result.swift:105 case let .Success(v): f(v, g)Result.swift:135 case let .Success(v): return vResult.swift:146 case Success: return nilResult.swift:156 case let Success(value): return valueResult.swift:168 case .Success(let x): return xSignal.swift:56 self.value = .Success(value)Signal.swift:115 case let .Success(value):Signal.swift:159 case let .Success(value):Signal.swift:176 case let .Success(value): g(value)Signal.swift:190 case .Success(_): returnSignal.swift:210 signal.update(.Success((a,b)))Signal.swift:215 signal.update(.Success((a,b)))Signal.swift:242 update(.Success(value))Waiting.swift:61 case let .Success(t): return t(ErrorType) 0033 0034 /** 0035 Initialize a result containing a successful value. 0036 */ 0037 public init(success value: T) { 0038 self = Success(value) 0039 } 0040 0041 /** 0042 Initialize a result containing an error 0043 */ 0044 public init(error: ErrorType) { 0045 self = Error(error) 0046 } 0047 0048 /** 0049 Transform a result into another result using a function. If the result was an error, 0050 the function will not be executed and the error returned instead. 0051 */ 0052 public func map
Result.swift:45 self = Error(error)Result.swift:55 case let .Error(error): return .Error(error)Result.swift:55 case let .Error(error): return .Error(error)Result.swift:69 case let .Error(error): g(.Error(error))Result.swift:69 case let .Error(error): g(.Error(error))Result.swift:81 case let .Error(error): return .Error(error)Result.swift:81 case let .Error(error): return .Error(error)Result.swift:94 return .Error(error)Result.swift:106 case let .Error(error): g(.Error(error))Result.swift:106 case let .Error(error): g(.Error(error))Result.swift:136 case .Error(_): return nilResult.swift:147 case Error(let x): return xResult.swift:157 case Error(let error): throw errorResult.swift:169 case .Error: return defaultValue()Signal.swift:120 case let .Error(error):Signal.swift:121 signal.update(.Error(error))Signal.swift:163 case let .Error(error): signal.update(.Error(error))Signal.swift:163 case let .Error(error): signal.update(.Error(error))Signal.swift:177 case .Error(_): returnSignal.swift:191 case let .Error(error): g(error)Signal.swift:219 signal.update(.Error(error))Signal.swift:250 update(.Error(error))Waiting.swift:62 case let .Error(e): throw e<U>(@noescape f: T -> U) -> Result<U> { 0053 switch self { 0054 case let .Success(v): return .Success(f(v)) 0055 case let .Error(error): return .Error(error) 0056 } 0057 } 0058 0059 /** 0060 Transform a result into another result using a function. If the result was an error, 0061 the function will not be executed and the error returned instead. 0062 */ 0063 public func map<U>(f:(T, (U->Void))->Void) -> (Result<U>->Void)->Void { 0064 return { g in 0065 switch self { 0066 case let .Success(v): f(v){ transformed in 0067 g(.Success(transformed)) 0068 } 0069 case let .Error(error): g(.Error(error)) 0070 } 0071 } 0072 } 0073 0074 /** 0075 Transform a result into another result using a function. If the result was an error, 0076 the function will not be executed and the error returned instead. 0077 */ 0078 public func flatMap
Signal.swift:69 signal.update(result.map(f))<U>(@noescape f: T -> Result<U>) -> Result<U> { 0079 switch self { 0080 case let .Success(v): return f(v) 0081 case let .Error(error): return .Error(error) 0082 } 0083 } 0084 0085 /** 0086 Transform a result into another result using a function. If the result was an error, 0087 the function will not be executed and the error returned instead. 0088 */ 0089 public func flatMap
Result.swift:90 return flatMap { t inSignal.swift:80 signal.update(result.flatMap(f))<U>(@noescape f: T throws -> U) -> Result<U> { 0090 return flatMap { t in 0091 do { 0092 return .Success(try f(t)) 0093 } catch let error { 0094 return .Error(error) 0095 } 0096 } 0097 } 0098 /** 0099 Transform a result into another result using a function. If the result was an error, 0100 the function will not be executed and the error returned instead. 0101 */ 0102 public func flatMap
Signal.swift:91 signal.update(result.flatMap(f))<U>(f:(T, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void { 0103 return { g in 0104 switch self { 0105 case let .Success(v): f(v, g) 0106 case let .Error(error): g(.Error(error)) 0107 } 0108 } 0109 } 0110 0111 /** 0112 Call a function with the result as an argument. Use this if the function should be 0113 executed no matter if the result was a success or not. 0114 */ 0115 public func ensure<U>(@noescape f: Result<T> -> Result<U>) -> Result<U> { 0116 return f(self) 0117 } 0118 0119 /** 0120 Call a function with the result as an argument. Use this if the function should be 0121 executed no matter if the result was a success or not. 0122 */ 0123 public func ensure<U>(f:(Result<T>, (Result<U>->Void))->Void) -> (Result<U>->Void)->Void { 0124 return { g in 0125 f(self, g) 0126 } 0127 } 0128 0129 /** 0130 Direct access to the content of the result as an optional. If the result was a success, 0131 the optional will contain the value of the result. 0132 */ 0133 public var value
Signal.swift:102 result.flatMap(f)(signal.update): T? { 0134 switch self { 0135 case let .Success(v): return v 0136 case .Error(_): return nil 0137 } 0138 } 0139 0140 /** 0141 Direct access to the error of the result as an optional. If the result was an error, 0142 the optional will contain the error of the result. 0143 */ 0144 public var error: ErrorType? { 0145 switch self { 0146 case Success: return nil 0147 case Error(let x): return x 0148 } 0149 } 0150 0151 /** 0152 Access the value of this result. If the result contains an error, that error is thrown. 0153 */ 0154 public func get() throws -> T { 0155 switch self { 0156 case let Success(value): return value 0157 case Error(let error): throw error 0158 } 0159 } 0160 } 0161 0162 0163 /** 0164 Provide a default value for failed results. 0165 */ 0166 public func ?? <T> (result: Result<T>, @autoclosure defaultValue: () -> T) -> T { 0167 switch result { 0168 case .Success(let x): return x 0169 case .Error: return defaultValue() 0170 } 0171 } 0172
Signal.swift:258 return value?.value