2016-02-28 28 views
-2

我想:找幾個變量的值,以及運行一些功能,其中住在對象A,所有從Object B.從不同的對象變量的值或運行功能 - 斯威夫特

我有現在嘗試幾個小時,以使其與代表和協議一起工作。沒有運氣。

我不能做這樣的事情:

var delegate: MyDelegate = ViewController() 

因爲好像創建視圖控制器的新實例。我希望來自已經運行的實例的值。

我也不能這樣做:

var delegate: MyDelegate? 

因爲視圖控制器對象從不響應。所以我沒有任何時間,我打電話給代理?.somefunction()

我不希望在屏幕之間的延續。我只需要從另一個對象開始一個函數。

我敢打賭,這是一個簡單的修復。我無法得到它。謝謝你的幫助。

我的一些代碼:

class PauseButtonView: NSView{ 
    var delegate: PauseButtonDelegate? 
    ... 
    var result = delegate?.startFunction() 
} 

protocol PauseButtonDelegate { 
    func startFunction() -> String 
} 



    class ViewController: NSViewController, PauseButtonDelegate { 
     func startFunction() -> String { 
     let myString = "Hello World!" 
     return myString 
     } 
} 
+0

爲了要啓動另一個對象的方法,您必須具有對該對象的引用。你的類如何獲取正在運行的視圖控制器對象? – dasblinkenlight

+0

請向我們展示對象A和B的創建。除非需要強大的參考週期,否則您可能需要弱代表。 – Eendje

回答

0

如果你不想或者類有其他的引用,你可以使用內部通知,在它們之間通信:

// in your PauseButtonView 
    let object:[String:AnyObject] = [ "aParameter" : 42 ] 
    let startNotification = NSNotification(name: "startFunction:", object: object) 
    NSNotificationCenter.defaultCenter().postNotification(startNotification) 

    // in the view controller 
    func startFunction(notification:NSNotification) 
    { 
    let object = notification.object as? [String:AnyObject] 
    //... 
    }