[swift-evolution] [Idea] Add forced conversion for Error catching pattern matching

Tyler Fleming Cloutier cloutiertyler at aol.com
Tue Mar 22 01:19:09 CDT 2016


These I think add noise in terms of someone reading the code. Now not only do they need to know Swift’s error handling mechanism, but also they have to be familiar with my custom wrapper around it.


> On Mar 21, 2016, at 8:26 PM, Brent Royal-Gordon <brent at architechies.com> wrote:
> 
>> do {
>>    let action = chooseAction(game)
>>    game = try game.applyAction(action)
>> } catch let e as ActionError {
>>    game.failedAction = e
>> } catch _ {
>>    fatalError(“This is an unfortunate bit of noise :/")
>> }
> 
> If you're just worried about the noise...
> 
> 	try! {
> 		do {
> 			let action = chooseAction(game)
> 			game = try game.applyAction(action)
> 		}
> 		catch let e as ActionError {
> 			game.failedAction = e
> 		}
> 	}()
> 
> Or if that's too much syntax:
> 
> 	func mustSucceed<Return>(function: () throws -> Return) -> Return {
> 		return try! function()
> 	}
> 	
> 	mustSucceed {
> 		do {
> 			let action = chooseAction(game)
> 			game = try game.applyAction(action)
> 		}
> 		catch let e as ActionError {
> 			game.failedAction = e
> 		}
> 	}
> 
> Or, if you use this specific ActionError logic widely, you can put that in a function:
> 
> 	func catchActionError<Return>(function: () throws -> Return) -> Return? {
> 		do {
> 			return try function()
> 		}
> 		catch e as ActionError {
> 			game.failedAction = e
> 			return nil
> 		}
> 		catch {
> 			fatalError()
> 		}
> 	}
> 	
> 	catchActionError {
> 		let action = chooseAction(game)
> 		game = try game.applyAction(action)
> 	}
> 
> -- 
> Brent Royal-Gordon
> Architechies
> 



More information about the swift-evolution mailing list