Skip to content

Instantly share code, notes, and snippets.

func f() throws Error1 { return 42 }
func g(meaning: Int) throws Error2 { print(meaning) }
func test() {
do {
try g(try f())
} catch let err1 as Error1 {
} catch let err2 as Error2 {

Suggestion for behaviours proposal

Basic syntax

public behaviour lazy<Value>: Value {
  private var storage: Value?

  // Only `init()` allowed for now
 init() {


  • Proposal: SE-NNNN
  • Author(s): Anton3
  • Status: Awaiting review
  • Review manager: TBD


Add mixins, which contain both protocol requirements and stored properties. Mixins will subsume abstract class functionality and allow similar functionality on structs. They will also allow for safe multiple inheritance, defining standard "bricks" carrying interface, implementation and state, which can be reused in multiple types.

function-type( function-type-parametersopt ) throws-annotationopt -> type

function-type-parametersfunction-type-parameter , function-type-parameters

function-type-parametersfunction-type-parameter ...opt

function-type-parameterattributesopt inoutopt type

throws-annotationthrows | rethrows

Refactor metatypes


  • Rename metatypes T.Type to Metatype

Refactor Metatypes, repurpose T.self and Mirror


This proposal want to revise metatypes T.Type, repurpose public T.self notation to return a new Type type instance rather than a metatype, merge SE-0101 into Type, rename the global function from SE-0096 to match the changes of this proposal and finally rename current Mirror type to introduce a new (lazy) Mirror type.

The metatypes explanation

For every type T in Swift, there is an associated metatype T.Type.

Basics: function specialization

Let's try to write a generic function like staticSizeof. We will only consider its declaration; implementation is trivial and unimportant here.

Out first try would be: