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) }
解决方法
UIBezierPath(…)的参数具有CGFloat类型,但是您传递了一个
双重论点.显式地转换值有助于:
var endAngle = CGFloat(2.0 * M_PI - M_PI_2)
编译32位体系结构时出现问题,其中CGFloat
被定义为Float而不是Double.
另见https://github.com/ksm/SwiftInFlux:
What is happening here is that CGFloat is a typealias for either Float
or Double depending on whether you’re building for 32 or 64-bits. This
is exactly how Objective-C works,but is problematic in Swift because
Swift doesn’t allow implicit conversions.We’re aware of this problem and consider it to be serIoUs: we are
evaluating several different solutions right Now and will roll one out
in a later beta. As you notice,you can cope with this today by
casting to Double. This is inelegant but effective版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。