[swift-evolution] [Proposal] Remove Boolean

Anton Zhilin antonyzhilin at gmail.com
Thu Jun 23 16:33:22 CDT 2016

Following goals of Swift 3, I've prepaired a minimalistic proposal to 
remove Boolean protocol.


## Introduction

Remove `Boolean` protocol. Only Bool will be able to be used in logical 

let x: ObjCBool = true
if x {  // will become an error!

## Motivation

"Boolean" isn't pulling its weight:
- It only abstracts over Bool and ObjCBool.
- It only enables a few operations on ObjCBool, which are not very 
- ObjCBool is a bridging problem, and we don't handle bridging by 
introducing common protocols (e.g. in the case of String vs NSString, we 
don't introduce a common "Stringable" protocol.

Further, it complicates the model:
- People are confused by it and the similar but very different Bool 
- Bool is a simple enough concept to not need a family of protocols.

## Impact on existing code

Change is backwards incompatible, but automatic migration is possible:

- In places where Boolean (but not Bool) was in logical contexts, 
migrator can add `.boolValue`
- Migrator can remove conformances to Boolean

More information about the swift-evolution mailing list