In Swift only methods which can throw
can catch
. The Int
initializer does not throw
The Swift pattern are optionals
func getInt(_ data:String) -> Int?
{
return Int(data)
}
let a = "x123"
if let b = getInt(a) {
print("Result: \(b)")
} else {
print("No result")
}
Or you can return a non-optional and handle the optional error with the nil coalescing operator
func getInt(_ data:String) -> Int
{
return Int(data) ?? -1
}
let a = "x123"
let b = getInt(a)
print("Result: \(b)")
Or make your method can throw
enum MyError : Error {
case conversionError
}
func getInt(_ data:String) throws -> Int
{
guard let result = Int(data) else { throw MyError.conversionError }
return result
}
let a = "x123"
do {
let b = try getInt(a)
print("Result: \(b)")
} catch MyError.conversionError {
print("Could not convert the string '\(a)' to integer")
}
Please read the section about Optionals in the Swift Language Guide