mi sono imbattuto in questo utilizzando questo pezzo innocente di codice:
func foo(line: CTLine) {
let ascent: CGFloat
let descent: CGFloat
let leading: CGFloat
let fWidth = Float(CTLineGetTypographicBounds(line, &ascent, &descent, &leading))
let height = ceilf(ascent + descent)
// ~~~~~~^~~~~~~~
}
E trovato la soluzione espandendo la errore nel Navigatore problema:
Guardandoci sopra, penso che Swift abbia trovato la funzione +(lhs: Float, rhs: Float) -> Float
innanzitutto in base al suo tipo di ritorno (ceilf
occupa un Float
). Ovviamente, questo prende Float
s, non CGFloat
s, che fa luce sul significato del messaggio di errore. Così, per costringerlo a utilizzare l'operatore giusto, devi utilizzare una funzione wrapper che prende sia un Double
o un Float
(o solo un CGFloat
, ovviamente). Così ho provato questo e l'errore è stato risolto:
// ...
let height = ceilf(Float(ascent + descent))
// ...
altro approccio sarebbe quella di utilizzare una funzione che prende un Double
o CGFloat
:
// ...
let height = ceil(ascent + descent)
// ...
Quindi il problema è che le priorità compilatore restituisce tipi su tipi di parametri. Felice di vedere questo sta ancora accadendo in Swift 3; P
fonte
2016-08-23 22:12:15
Certo che puoi. - Un esempio di codice (piccolo, autonomo) che mostri il tuo problema sarebbe estremamente utile ... –
Anche io ricevo lo stesso errore, quale potrebbe essere la possibile ragione? – sasquatch