Swiftにコーディングして上記のエラーを取得...
メッセージは他の何かをマスキングしていますかOR本当に2つのCGFloatオペランドを追加できないのですか?そうでない場合、なぜ(地上で)できないのですか?
私がやろうとしているコードには特別なことは何もありません。おもしろいのは、上記のエラーメッセージVERBATIMがSwiftアシスタントコンパイラーが教えてくれることです(コードに赤い波線で下線を引きます)。
Xcode 6.3の実行(Swift 1.2)
二項演算子「+」を使用して2つのCGFloat変数を追加することは絶対に可能です。知っておく必要があるのは、結果の変数がCGFloat変数であることです(Inference Principle型に基づく)。
let value1 : CGFloat = 12.0
let value2 : CGFloat = 13.0
let value3 = value1 + value2
println("value3 \(value3)")
//The result is value3 25.0, and the value3 is of type CGFloat.
編集:Swift v3.0規約
let value = CGFloat(12.0) + CGFloat(13.0)
println("value \(value)")
//The result is value 25.0, and the value is of type CGFloat.
私はこの無邪気なコードを使用してこれに遭遇しました:
_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)
// ~~~~~~ ^ ~~~~~~~
}
_
Issue Navigatorでエラーを展開することで解決策を見つけました:
調べてみると、Swift=は最初にその戻り型に基づいて+(lhs: Float, rhs: Float) -> Float
関数を見つけました(ceilf
はFloat
を受け取ります)。明らかに、これはFloat
sではなくCGFloat
sを取り、エラーメッセージの意味にいくらか光を当てます。 eithera Double
ora Float
(または単にCGFloat
、明らかに)。だから私はこれを試してエラーが解決しました:
_ // ...
let height = ceilf(Float(ascent + descent))
// ...
_
別のアプローチは、Double
またはCGFloat
をとる関数を使用することです。
_ // ...
let height = ceil(ascent + descent)
// ...
_
問題は、コンパイラーがパラメーター型よりも戻り型を優先することです。これを確認できてうれしいことは、まだSwift 3; P
この種のエラーが発生する主な原因は2つあります。
最初:
次のようなオプションのタイプCGFloat変数を比較しようとするたびに
if a? >= b?
{
videoSize = size;
}
これはエラーの原因であるため、jusはif a! >= b!{}
2番目:使用値を指定して、その時点で結果を得るときはいつでも、この種のエラーが発生します
お気に入り
var result = 1.5 / 1.2
上記のように使用しないでください。
CGFloatとして宣言されているオブジェクトで使用
お気に入り
var a : CGFloat = 1.5
var b : CGFloat = 1.2
var result : CGFloat!
result = a / b