2014-06-05 20 views
6

我被Swift教程弄糊塗了。是否可選<T>。在Swift中沒有相同的東西?

nil只是一個方便的快捷方式Optional<T>.None
是否存在從一個到另一個的隱式轉換?

一對夫婦的意見:

  • Optional<String>.None == nil
  • nil文字似乎有NilType

如果這是一個隱式轉換,我可以定義自己的類型是「接受」零,或者是Optional在這方面有點特別?我不認爲定義可轉換爲nil類型是一個好主意 - 我只是想了解這種情況下類型系統是如何工作的。

回答

7

如果在聲明可選 變量或屬性時未提供初始值,則其值將自動默認爲零。

它們具有相同的值,都是nil

其實Optional<T>.None是一個多態原始值,nil是一個具有此值的常量。 Optional<T>是一個多態類型。 nil的類型是Optional<T>。這就是爲什麼你不能將nil分配給除Optional<T>之外的其他任何東西。出於同樣的原因,您不能將true分配給除Bool之外的任何內容。

 

現在,根據文檔,您不能使用nil任何自定義和任意類型,但自選。

nil不能與非可選常量和變量一起使用。如果代碼中的常量或變量需要能夠應對某些條件下缺少值的情況,則始終將其聲明爲適當類型的可選值 。

+0

但是你怎麼能把'nil'分配給'Optional'而不是其他任何東西?我可以用相同的行爲來定義'MyOptional'嗎? –

+0

@丹:我已經更新了涵蓋這個問題的答案。這似乎是不可能的。 – deepmax

+0

謝謝。感覺很好,探索新的東西:-) –

相關問題