Swift version: 5.10
If you've ever come across the error message "No 'ceil' candidates produce the expected contextual result type 'Int'" – which can happen with calls to ceil()
, floor()
, and round()
– it's usually down to Swift being unable to satisfy type requirements you have asked for.
Put simply, you might think calling ceil()
rounds a floating-point number up to its nearest integer, but actually it doesn't return an integer at all: if you give it a Float
it returns a Float
, and if you give it a Double
it returns a Double
.
So, this code works because c
ends up being a Double
:
let a = 0.5
let c = ceil(a)
…whereas this code causes your exact issue because it tries to force a Double
into an Int
without a typecast:
let c: Int = ceil(a)
If you need c
to be an integer, the solution is to convert the return value of ceil()
to be an integer, like this:
let c = Int(ceil(a))
The same is true of the floor()
and round()
functions, so you'd need the same solution.
SPONSORED Get accurate app localizations in minutes using AI. Choose your languages & receive translations for 40+ markets!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 7.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.