You could do it like thisfunc randomlyDangerousInt() throws -> Int { let potential = arc4random() if (potential == UInt32.max) {throw NSError(domain: overflow, code:0, userInfo: nil)} if (potential % 4 == 0) {throw NSError(domain: invalid, code:666, userInfo: nil)} else {return Int(potential)} } class TestClass { let x: Int let y: Int let z: Int init?() { var shouldFail = false do {x = try randomlyDangerousInt()} catch {shouldFail = true; x = 0} do {y = try randomlyDangerousInt()} catch {shouldFail = true; y = 0} do {z = try randomlyDangerousInt()} catch {shouldFail = true; z = 0} if (shouldFail) {return nil} } } let a = TestClass() let b = TestClass() let c = TestClass()Or, you could make your class a struct if that would work (and then can return nil at any point during initialization), or encapsulate parts of your class in a separate struct like this:struct CTCResources { let x: Int let y: Int let z: Int init?() { do { x = try randomlyDanger