从Swift中的其他类中分配函数

时间:2015-03-24 12:21:43

标签: ios swift

是否可以从另一个可以在应用程序运行时动态更改的类访问和运行特定的方法/函数?

我会尽可能地简化问题。

SelectionPage.swift

选择需要使用UIPickerView选择和访问的类 - 可能的10种选择(Class1,Class2,Class3,...,Class10)。

Class1.swift,Class2.swift,... Class10.swift

10个类中的每个类都有一个名称完全相同但编程方式不同的方法:

func runOnUpdate() { }

GameSceneViewController.swift

当在SelectionPage上进行选择时,应用程序会转到GameSceneViewController,每次运行更新功能时都会运行特定的选定函数:

override func update(currentTime: CFTimeInterval) 
{ 
    // run runOnUpdate() function here from selected class
}

在更新函数中,我想执行runOnUpdate()函数,具体取决于SelectionPage上选择的类。这可能吗?理想情况下,我希望能够在:

中分配特定的类/方法
    override func didMoveToView(view: SKView)

这样我也可以访问其他功能。

我已经研究过lazy instantiation,为每个类创建委托,@ objc(Class1),[AnyClass]数组,typealias,结构中的全局变量,单例等等但是我无法弄清楚如何使这项工作。

这似乎是一个相当普遍的问题,所以任何帮助将不胜感激!提前谢谢!

1 个答案:

答案 0 :(得分:2)

你在尝试委托时是正确的,因为这是你应该制作协议和委托的情况。该协议需要该功能。从那里你将delegate属性设置为符合该协议的类的实例,然后调用delegate?.someFunction()来调用给定对象上的函数。

class ViewController: UIViewController {
    var delegate: Updatable?

    override func viewDidLoad() {
        super.viewDidLoad()


        let foo = Foo()
        delegate = foo
        delegate?.runOnUpdate() // prints do something
    }
}


protocol Updatable {
    func runOnUpdate()
}

class Foo: NSObject, Updatable {
    func runOnUpdate() {
        println("do something")
    }
}