2015-08-20 38 views
0

我見過兩種方式聲明協議,但我沒有得到區別。swift最新最新這些協議之間的區別

練習1:

protocol AddItemViewControllerDelegate { 
    func controller(controller: AddItemViewController, didAddItem: String) 
} 

練習2:

protocol AddItemViewControllerDelegate: class { 
    func controller(controller: AddItemViewController, didAddItem: String) 
} 

所以什麼區別?

+0

你爲什麼要刪除您的其他問題http://stackoverflow.com/questions/32127906/swift-back-from-vc3-to-vc1-and-pass-data/32128063#32128063?我正準備發佈完整的樣本。 – vikingosegundo

回答

4

從文檔:

您可以通過添加class關鍵字協議的繼承 列表限制協議採用類類型(而不是結構或 枚舉)。 class關鍵字必須首先出現在協議的 繼承列表,之前任何繼承協議:

protocol SomeClassOnlyProtocol: class, SomeInheritedProtocol { 
// class-only protocol definition goes here } 

注:

使用一個唯一的類協議時,由該協議的 定義的行爲要求假定或要求符合類型具有參考 語義而不是值語義。

1

,如果你想聲明像這樣的變量:

var aVar : AddItemViewControllerDelegate? 

你要做的:

protocol AddItemViewControllerDelegate: class { 
    func controller(controller: AddItemViewController, didAddItem: String) 
} 
+0

例如:弱var委託:AddItemViewController? ? –

+0

好吧,這只是一個例子,不保證是controllerDelegate。有時候,你只需要一個指向服從委託的類的指針。 –

相關問題