let something = SomeObject() // Works as expected something.someBlock = { print($0) } something.someAction() // Crashes 💥 something.someBlock = defaultBlock() something.someAction() // Works as expected something.someBlock = Optional(defaultBlock()) something.someAction() // Works as expected something.someBlock = unsafeBitCast(defaultBlock(), to: SomeBlock.self) something.someAction()