我需要将值存储为Float,但源数据是CGFloat:
let myFloat : Float = myRect.origin.x
Run Code Online (Sandbox Code Playgroud)
但这会导致编译器错误:'NSNumber'不属于子类型'Float'
所以如果我明确地这样做:
let myFloat : Float = myRect.origin.x as Float
Run Code Online (Sandbox Code Playgroud)
但这反过来导致编译器错误:'无法将表达式的类型'Float'转换为'Float''
这样做的正确方法是什么,请满足编译器的要求?
// Playground - noun: a place where people can play
func getAverage(numbers: Int...) -> Double{
var total = 0
var average:Double = 0
for number in numbers{
total = total + number
}
average = total / numbers.count
return average
}
getAverage(3, 6)
Run Code Online (Sandbox Code Playgroud)
我收到错误 average = total / numbers.count
找不到接受提供的参数的'/'的重载
我试图修复:
average = Double(total/numbers.count)
Run Code Online (Sandbox Code Playgroud)
但是getAverage被设置为4而不是4.5
我正在观看WWDC2014上的一些视频并尝试编写我喜欢的代码,但我注意到的一个奇怪的事情是Swift一直对我生气并希望我投射到不同的数字类型.这很容易,但在WWDC的视频中他们不需要这样做.以下是"Interface Builder的新功能"中的示例:
-M_PI/2一直给我错误:"无法找到接受提供的参数的'/'的重载'
有没有人有这个问题的解决方案,这不仅仅涉及投射,因为有明显的另一种方式这样做?对于类似的问题,我有很多例子.
if !ringLayer {
ringLayer = CAShapeLayer()
let innerRect = CGRectInset(bounds, lineWidth / 2.0, lineWidth / 2.0)
let innerPath = UIBezierPath(ovalInRect: innerRect)
ringLayer.path = innerPath.CGPath
ringLayer.fillColor = nil
ringLayer.lineWidth = lineWidth
ringLayer.strokeColor = UIColor.blueColor().CGColor
ringLayer.anchorPoint = CGPointMake(0.5, 0.5)
ringLayer.transform = CATransform3DRotate
(ringLayer.transform, -M_PI/2, 0, 0, 1)
layer.addSublayer(ringLayer)
}
ringLayer.frame = layer.bounds
Run Code Online (Sandbox Code Playgroud)