不能在UIBezierPath()中使用实例方法

时间:2017-03-20 02:52:41

标签: swift

假设我想在案例1中绘制一条线,如果我在另一条线路中使用该方法,则无法使用UIBezierPath()中的方法。

但是如果我添加"我可以使用这些方法。"紧跟BezierPath()之后的案例2

案例1

import UIKit

class ViewController: UIViewController {
    let path = UIBezierPath()
    path.
}

enter image description here

案例2

import UIKit

class ViewController: UIViewController {
    let path = UIBezierPath().move(to: <#T##CGPoint#>)
}

enter image description here

2 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为您需要在函数内部调用方法,而不是在类的声明中调用。请尝试以下方法:

import UIKit

class ViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let path = UIBezierPath()
        // Invoke method here
        path.
    }
}

答案 1 :(得分:3)

以下是代码的前两行:

class ViewController: UIViewController {
    let path = UIBezierPath()

第一行(以class开头)开始定义名为ViewController的类。第二行(以let开头)定义了一个名为path的实例属性,并表示每次程序创建ViewController实例时,都应该初始化path变量通过评估表达式UIBezierPath()

然后你试着写这样的东西:

path.move(to: .zero)

问题是您正在尝试直接在类定义中编写该行。你不能。您可以直接在类定义中放置的唯一内容是属性和方法定义。你不能把语句写下来。

你有两种选择。一种是在稍后的方法中完成属性的初始化,例如在viewDidLoad中。 Julian J. Tejera的答案涵盖了这一点。

另一种方法是通过执行闭包来初始化属性:

class ViewController: UIViewController {

    let path: UIBezierPath = {
        let path = UIBezierPath()
        path.move(to: .zero)
        path.addLine(to: CGPoint(x: 10, y: 0))
        return path
    }()

}

请注意,您不能在该闭包中引用任何ViewController实例属性或方法,因为self在运行时未完全初始化。