web-dev-qa-db-ja.com

Swift DoubleはCGFloatに変換できません

次の行に到達したときに単純な円を描画しようとしていますが、「Double [はstartAngle = 0.0

path.addArcWithCenter(center, radius: radius, startAngle: 0.0, endAngle: Float(M_PI) * 2.0, clockwise: true)

Swiftで0.0を「キャスト」してCGFloatにするにはどうすればよいですか?

私が書いている完全な機能:

func drawCircle() {
    // Drawing code
    var bounds:CGRect = secondView.bounds
    var center = CGPoint()
    center.x = bounds.Origin.x + bounds.size.width / 2.0
    center.y = bounds.Origin.y + bounds.size.height / 2.0
    var radius = (min(bounds.size.width, bounds.size.height) / 2.0)
    var path:UIBezierPath = UIBezierPath()
    path.addArcWithCenter(center, radius: radius, startAngle: CGFloat(0.0), endAngle: Float(M_PI) * 2.0, clockwise: true)
    path.stroke()    
}
22
dcbenji

CGFloatにする必要がある値をCGFloatに変換します。

path.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0.0), endAngle: CGFloat(M_PI) * 2.0, clockwise: true)

リテラルを渡すだけの場合は、startAngleを変換する必要はないでしょう。また、これはCスタイルのキャストではありませんが、実際には異なるSwiftタイプ間で変換することに注意してください。

編集:あなたの機能全体を見て、これは動作します。

func drawCircle() {
        // Drawing code
        var bounds:CGRect = self.view.bounds
        var center = CGPoint()
        center.x = bounds.Origin.x + bounds.size.width / 2.0
        center.y = bounds.Origin.y + bounds.size.height / 2.0
        var radius = (min(bounds.size.width, bounds.size.height) / 2.0)
        var path:UIBezierPath = UIBezierPath()
        path.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0.0), endAngle: CGFloat(Float(M_PI) * 2.0), clockwise: true)
        path.stroke()    
    }
24
Connor

CGFloat(0.0)を介してキャストする必要があります。 Obj-Cでは、CGFloatはターゲットに応じてfloatまたはdoubleにキャストされる(64ビットと32ビット)ため、Xcode 6のベータ版全体で異なる評価を行うようにCGFloatが調整されました。 CGFloatに数値をキャストするSwiftで入力する必要があります。CGFloatを使用するには、floatまたはdoubleが保証されないため(環境に依存するため)。このように、= Swiftは適合をスローせず、「タイプ」に対して安全です。

8
TheCodingArt

たぶんそれは良い考えではないかもしれませんが、NSNumberを使用してDoubleをFloatに、次にCGFloatに変換しました。

let myFloat = NSNumber.init(value: myDouble).floatValue
let myCGFloat = CGFloat(myFloat)
0
AndrewAnders