2016-06-23 41 views
0

我和我的兄弟剛開始使用Apple製作的開始開發iOS應用程序(Swift)教程來使用Swift製作我們的iOS應用程序。在本教程開始時,我們使用委託來允許按鈕將標籤的文本更改爲文本字段中的文本。我們不確定爲什麼我們需要使用委託,並讓這些類自己進行數據訪問。我們已經做了大量的研究,似乎使用代表的唯一原因是您需要將數據返回給以前的視圖控制器。爲什麼你需要在單個視圖控制器中使用委託?謝謝。爲什麼你需要在一個視圖控制器中使用委託?

回答

1

A 代表是一個對象,當該對象在程序中遇到事件時,代表另一個對象或與之協作。委派對象通常是一個響應者對象 - 也就是說,對象繼承自AppKit中的NSResponder或UIKit中的UIResponder,它正在響應用戶事件。委託是被委派控制該事件的用戶界面的對象,或者至少被要求以應用特定的方式解釋事件。

委託方法具有常規形式。它們以AppKit或UIKit對象的名稱開始,執行委託應用程序,窗口,控件等;這個名字是小寫的,沒有「NS」或「UI」前綴。通常(但不總是)該對象名稱後面跟着一個輔助動詞,指示所報告的事件的時間狀態。換句話說,這個動詞表示事件是否即將發生(「應該」或「將要」)還是剛剛發生(「有」或「有」)。這種時間差別有助於對那些期望返回值的消息和那些不具有返回值的消息進行分類。


必須區分框架從框架類協議提供委託/委託你可以創建:

成爲一個框架類 一個框架類或實現代表團聲明任何其他類的代表代表財產和協議(通常是正式協議)。該協議列出了委託實現的必需和可選方法。爲了您的類的實例來作爲一個框架對象的委託功能,就必須做到以下幾點:

  • 設置你的對象作爲代表(通過將其分配給委託 屬性)。您可以通過編程方式或通過界面 Builder來完成此操作。
  • 如果協議是正式的,則聲明你的類在類定義中採用了 協議。

例子:

class myClass: NSObject,myCustomDelegate { 
    ... 
} 

此外,在這種SO thread你可以找到一些例子..

  • 實現所需的所有協議的方法,並要參與任何可選 方法

蘋果官方Source

+0

我明白代表是什麼,我只是不明白爲什麼你需要一個視圖控制器。視圖控制器將信息提供回前一個視圖是有意義的,因爲視圖控制器不知道前一個視圖控制器。但是,在單個視圖控制器中,所有對象都具有彼此的信息。爲什麼對象類不能自己做呢?爲什麼他們需要一個委託來做一切事情?謝謝。 –

+0

正如我在答案的第一部分所解釋的那樣,您可以將「框架代理」看作是一種界面方法,以瞭解關於您的對象的更多信息:UITextField具有委派方法,允許他知道用戶何時點擊鍵盤(textFieldShouldReturn),所以你有myTextField.delegate = self(我的實際類,我有我的東西)。爲什麼設置委託=自我?因爲我想知道發生在myTextField周圍的事件;) –

+0

因此,使用委託可以給一個類提供更多有關另一個類的信息,這些信息在沒有使用委託的情況下將不可用? –

0

所以你可能使用故事板,並且你所有的UIView組件如UIButtons/UITextFields等都是網點,你可以直接在你的UIViewController中訪問它們。

代表團:

代表團是一對一的連接關係,想象一下,你需要建立一個複雜的佈局你的看法的情況下,你創建的UIView的一個子類,繪製/佈局你的組件有,而不是將此視圖添加到UIViewController中的subivew,比如果您需要監聽該視圖中的事件(按鈕單擊,滾動視圖偏移更改等等,您將需要創建一個協議來監聽這些事件,並告訴您的UIViewController實現該協議巫婆生活在你複雜的UIView,由於MVC你的控制器是誰需要改變意見,請求和東西,他必須做的您需要努力工作,所以您需要通過該代理將數據或事件傳遞給您的控制器。

我不是老師,所以我希望你能理解我的觀點。

相關問題