Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-UIBezierPath额外参数';半径';随时待命_Swift_Uibezierpath_Layoutsubviews - Fatal编程技术网

Swift-UIBezierPath额外参数';半径';随时待命

Swift-UIBezierPath额外参数';半径';随时待命,swift,uibezierpath,layoutsubviews,Swift,Uibezierpath,Layoutsubviews,我正在将Objective-C库()改编为Swift,但无法解决此错误: func getRadius() -> CGFloat { var r : CGRect = CGRectInset(self.bounds, self.wellThickness/2.0, self.wellThickness/2.0) var w : CGFloat = r.size.width var h : CGFloat = r.size.height if w >

我正在将Objective-C库()改编为Swift,但无法解决此错误:

func getRadius() -> CGFloat {
    var r : CGRect = CGRectInset(self.bounds, self.wellThickness/2.0, self.wellThickness/2.0)
    var w : CGFloat = r.size.width
    var h : CGFloat = r.size.height

    if w > h {
        return h/2.0
    }else{
        return w/2.0
    }
}

override func layoutSubviews()  {
    super.layoutSubviews()

    var bounds : CGRect = self.bounds
    var wt : CGFloat = self.wellThickness
    var outer : CGRect = CGRectInset(self.bounds, wt/2.0, wt/2.0)
    var inner : CGRect = CGRectInset(self.bounds, wt, wt)

    var innerPath : UIBezierPath = UIBezierPath(ovalInRect: inner)
    var arcCenter = CGPointMake(CGRectGetMidX(outer), CGRectGetMidY(outer))
    var radius = self.getRadius()
    var startAngle = -(CGFloat(M_PI_2))
    var endAngle = (2.0 * M_PI - M_PI_2)
    // (Next line) ERROR: Extra argument 'radius' in call
    var outerPath : UIBezierPath = UIBezierPath(arcCenter: arcCenter, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true) 

}
我不明白为什么“半径”是一个额外的参数,如果我使用像苹果说的方法。。。 你知道怎么解决吗?
谢谢

错误消息非常容易引起误解。真正的问题是
endAngle:
UIBezierPath(…)
的参数的类型为
CGFloat
,但您正在传递
Double
参数。显式转换值有助于:

var endAngle = CGFloat(2.0 * M_PI - M_PI_2)
编译32位体系结构时会出现问题,其中
CGFloat
定义为
Float
,而不是
Double

另见:

这里发生的是CGFloat是这两个Float的类型别名 或者加倍,这取决于您是构建32位还是64位。这 这正是Objective-C的工作原理,但在Swift中存在问题,因为 Swift不允许隐式转换

我们意识到这个问题并认为它是严肃的:我们是 正在评估几种不同的解决方案,并将推出一种 在稍后的测试版中。正如你所注意到的,你今天可以通过 铸造双。这是不雅但有效的:-)

--克里斯·拉特纳

资料来源:


在操场上对我来说似乎很好。太好了!克里斯·拉特纳的一些见解。错过了他的帖子,我真的很感谢你的报价@弗兰克施密特:我已经用Xcode 6.1.1再次验证了它,并且用我建议的更改代码确实可以编译。@MartinR你说得对。我分配给CGPath类型的变量,这导致了一个相同的错误。添加尾部的
.CGPath
修复了它。