找不到类型为'CGSize'的初始值设定项,它接受Swift Project中类型'(() - > _)'的参数列表

时间:2015-04-24 19:54:57

标签: ios xcode swift cgsize

我正在与斯坦福大学的课程合作,并收到此错误:

Cannot find an initializer for type 'CGSize' that accepts an argument list of type '(() -> _)' 

本课程仅在几个月前讲授,但使用的是Xcode 6.2而不是Xcode 6.3。我需要做些什么来纠正这个错误?

这是讲座12 - 动态动画 - http://web.stanford.edu/class/cs193p/cgi-bin/drupal/

enter image description here

import UIKit

class DropItViewController: UIViewController {


    @IBOutlet weak var gameView: UIView!

    var dropsPerRow = 10

    var dropSize = CGSize {
        let size = gameView.bounds.size.width / CGFloat(dropsPerRow)
        return CGSize(width: size, height: size)
    }

    @IBAction func drop(sender: UITapGestureRecognizer) {
        drop()
    }

    func drop() {
        var frame = CGRect(origin: CGPointZero, size: dropSize)
        frame.origin.x = CGFloat.random(dropsPerRow) * dropSize.width

        let dropView = UIView(frame: frame)
        dropView.backgroundColor = UIColor.random

        gameView.addSubview(dropView)
     }
    }

    private extension CGFLoat {
    static func random(max: Int) -> CGFloat {
        return CGFloat(arc4random() % UInt32(max))

    }
    }

    private extension UIColor {
    class var random: UIColor {
        switch arc4random()%5 {
        case 0: return UIColor.greenColor()
        case 1: return UIColor.blueColor()
        case 2: return UIColor.orangeColor()
        case 3: return UIColor.redColor()
        case 4: return UIColor.purpleColor()
        default: return UIColor.blackColor()

    }
}

}

3 个答案:

答案 0 :(得分:2)

首先,您错误地输入了CGFloat。它是CGF l 燕麦而不是CGF L 燕麦。

对于第二部分,更改' ='到':'在dropSize中:

var dropSize : CGSize {
    let size = gameView.bounds.size.width / CGFloat(dropsPerRow)
    return CGSize(width: size, height: size)
}

此外,这是我第一次见到' ='用来代替':'在Swift中,自发布以来......

答案 1 :(得分:2)

这是你课程的代码:

var dropSize: CGSize {
    let size = gameView.bounds.size.width / CGFloat(dropsPerRow)
    return CGSize(width: size, height: size)
}

您只需要检查课程中的代码和代码,它就会对您有所帮助。

答案 2 :(得分:0)

在第一个错误中,您需要使用构造函数来创建 dropSize 。我建议你自己添加:

static func calculateDropSize(width: CGFloat, dropsPerRow: UInt32) -> CGSize {
    let size = CGFloat(width / CGFloat(dropsPerRow))
    return CGSize(width: size, height: size)
}

然后,您将该行重写为:

var dropSize = MyClass.calculateDropSize(gameView.bounds.size.width, dropsPerRow: dropsPerRow)

您可以将该函数添加为CGSize的扩展,但从面向对象的角度来看这是不可取的。

您的第二个错误只需要投射:

var frame = CGRect(origin: CGPointZero, size: CGFloat(dropSize))

你的第三个错误,正如Gasim评论的那样, CGFloat 被错误地写道:

private extension CGFloat {