2016-01-20 53 views
1

我見過需要參數,選擇器的對象。理解選擇器的一般概念是什麼?swift中選擇器的概念是什麼?

選擇選擇器的一個例子是NSTimer,其中我選擇的選擇器是增加計數器的函數。

timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: ("incrementCounter"), userInfo: nil, repeats: true) 

回答

3

選擇器是Objective-C中的一個概念,它表示要在運行時動態發送的消息(即要調用的方法)。當你通過選擇器設置一些東西時,你知道哪個消息將被髮送,但不一定是它的參數。 (有時甚至不會將它發送到哪個對象)。

您可以考慮選擇器是閉包/塊的相對關係,因爲它們允許您打包稍後調用的某些代碼並將它交給其他某個函數。但是,必須在編譯時指定/解析閉包,所以它不如選擇器動態。

選擇器對控制動作等「寬鬆綁定」概念非常有用。您可以使用選擇器在Interface Builder中選擇按鈕在單擊時應該調用哪種方法,即使您的應用程序實際上並未在IB中運行;或者你可以說「這個按鈕應該在任何文本視圖都有鍵盤焦點時調用paste:」,不知道你什麼時候設置了哪個視圖(因爲鍵盤焦點總是在變化)。在歷史上,選擇器是告訴API事物的主要方式,比如「稍後調用這個方法」,這就是爲什麼你可以在整個Cocoa中找到它們,例如定時器,數組排序和即使這種模式可能因封閉/封閉的緊密結合而受益更多。

更多關於在夫特使用選擇器,請參閱Interacting with Objective-C APIs使用夫特與可可和Objective-C和/或this SO answer。有關選擇器和可可的更多信息,請參見Cocoa Core Competencies: Selector

2

selector是其在所指定的類由target當計時器觸發稱爲自定義方法。如果方法應該帶參數,則每個參數都用冒號表示。

在夫特的structSelector響應該協議StringLiteralConvertible
因此 - 因爲編譯器知道在您的示例的類型 - 一個文字串被隱式轉換爲Selector實例,不需要Selector初始化。

PS:選擇器字符串周圍的圓括號也不需要。