2010-06-05 43 views

回答

14

委託是通常對另一個對象中的某個事件作出反應並且/或者可以影響另一個對象如何表現的對象。這些對象一起工作以完成一項任務。通常,委託對象將由許多其他具有更具體任務的對象共享。代表本身將更加抽象,並且對於不同的任務應該是非常可重用的。包含委託的對象通常在發生觸發事件時向委託發送消息,爲委託人提供執行其指定任務的機會。

還有更多文檔here,您應該閱讀這些文檔以瞭解Cocoa和Cocoa touch中的委託模式,特別是如何在UIWindow和UIView之間使用委派。這是iPhone體系結構中的一個整體設計模式,如果您希望設計一個乾淨的應用程序,應該掌握它。

+2

鏈接已死 – lindenrovio 2014-05-24 14:10:49

+0

另一個有用的鏈接在這裏 - [鏈接](https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html) – 2014-10-16 06:15:19

3

Delegation is a pattern和這個術語在可可中是相同的。

代表未執行in a UIViewController。不同種類的視圖控制器都可以委託一個委託來處理某些任務。最好的例子之一(如果我們正在談論iPhone)是UITableViewDelegate,當某些與表格相關的事件發生時,它被調用來做某些事情。

5

代表用於將對象的任務委託給其所有者(或任何對象,真的)。這樣做的一個好的原因是它可以更容易地使用組合而不是繼承。委託是對符合指定協議的對象的引用,因此您可以保證它將實現所需的方法。一個很好的例子是UIApplicationDelegate。請注意委託方法(來自協議)是如何使用applicationDid,applicationShould,applicationWill等動詞的。通常,委託方法要麼需要做某些事情的權限(並且選擇這樣做,在方法中,而不是隻使用BOOL屬性,以獲得更大的靈活性),或通知代表將發生或發生的事件。

0

委託的概念在iOS中很常見。一個對象通常會依賴另一個對象來完成某些任務。這種關注的分離使得系統變得簡單,因爲每個對象只做它擅長的事情,並讓其他對象處理剩下的事情。表格視圖提供了一個很好的例子。

1

委託用於傳遞/傳遞類/結構中兩個對象的數據以完成任務。 例如:考慮將機密數據發送給第二VC(接收者或代表或祕書)的第一VC(發件人或委託人或CEO)。 這是通過secondVC符合一個

protocol passDataDelegate { func passdata(data: String) } 

class secondVC : UIViewController, passDataDelegate { 
func passdata(data: String) { 
    print("CEO passed //(data)") 
    } 
} 

class firstVC : UIViewController { 
    var delegate : passDataDelegate? 
} 

因爲,接收符合協議passDataDelegate現在創建的兩個firstVC & secondVC

let sender = firstVC() 
let receiver = secondVC() 

對象完成。因此,它的類型爲UIViewControllerpassDataDelegate,因爲如果一個類符合協議,那麼它的類的對象可以將協議作爲類型。

因此,分配sender.delegate = receiver

現在,我們可以CEO(發件人)可以通過其委託財產將數據傳遞給祕書(接收器)作爲

sender.delegate?.passdata("Confidential data") 

Output: CEO passed Confidential data 

現在的祕書(接收器)可以使用該數據完成她的進一步任務。