2015-09-25 44 views
-1

我對Swift比較陌生,有一件讓我感到沮喪的事情是無法創建代表類和協議的單一類型(類似於Objective-C中的Class<Protocol> *)。有protocol<Protocol1, Protocol2>運營商可以從多個協議創建一個新的協議類型;所以我的問題是,爲什麼這是不可能的類和協議?爲什麼Swift中沒有混合類協議類型?

我知道這可以使用泛型來完成(例如<T: Class where T: Protocol>)。但是,這看起來很奇怪,尤其是在您可能希望將該類型存儲在實例變量中但不希望將類泛型添加到您的類中的情況下,這些泛型將被視爲實現細節。

我想更好地理解爲什麼在Swift中這是不可能的。具體而言,我感興趣的是如何實現(或定義)類和協議類型,以及爲什麼不可能將它們組合爲單一類型。

+0

我不認爲我的問題是重複的,因爲我問_why_(從語言設計的角度來看)不可能將類和協議類型組合起來,而不是尋找解決方法。 – titaniumdecoy

+0

好吧,我刪除了「可能重複」的標籤! –

+0

這只是給你一個不同的關閉原因。 「爲什麼*做了*蘋果做了___?」除了蘋果之外,任何人都不能以權威的方式回答問題(即不是由SO社區和「爲什麼*會*蘋果會做?」)問題是基於意見的。 – rickster

回答

1

這是怎麼回事?

我們宣佈的協議和類

protocol Wearable { } 
class Computer { } 

那我們宣佈3類

class AppleWatch: Computer, Wearable { } 
class Mac: Computer { } 
class Jeans: Wearable { } 

而現在的方法是接受必須延伸Computer並符合Wearable

func foo<T:Computer where T: Wearable>(something:T) { } 

最後我們來測試它們:

foo(AppleWatch()) // OK 
foo(Mac()) // error at compile time 
foo(Jeans()) // error at compile time 

這是你的意思嗎?

相關問題