我被Swift教程弄糊塗了。是否可選<T>。在Swift中沒有相同的東西?
是nil
只是一個方便的快捷方式Optional<T>.None
?
是否存在從一個到另一個的隱式轉換?
一對夫婦的意見:
Optional<String>.None == nil
nil
文字似乎有NilType
如果這是一個隱式轉換,我可以定義自己的類型是「接受」零,或者是Optional
在這方面有點特別?我不認爲定義可轉換爲nil類型是一個好主意 - 我只是想了解這種情況下類型系統是如何工作的。
我被Swift教程弄糊塗了。是否可選<T>。在Swift中沒有相同的東西?
是nil
只是一個方便的快捷方式Optional<T>.None
?
是否存在從一個到另一個的隱式轉換?
一對夫婦的意見:
Optional<String>.None == nil
nil
文字似乎有NilType
如果這是一個隱式轉換,我可以定義自己的類型是「接受」零,或者是Optional
在這方面有點特別?我不認爲定義可轉換爲nil類型是一個好主意 - 我只是想了解這種情況下類型系統是如何工作的。
如果在聲明可選 變量或屬性時未提供初始值,則其值將自動默認爲零。
它們具有相同的值,都是nil
。
其實Optional<T>.None
是一個多態原始值,nil
是一個具有此值的常量。 Optional<T>
是一個多態類型。 nil
的類型是Optional<T>
。這就是爲什麼你不能將nil
分配給除Optional<T>
之外的其他任何東西。出於同樣的原因,您不能將true
分配給除Bool
之外的任何內容。
現在,根據文檔,您不能使用nil
任何自定義和任意類型,但自選。
nil不能與非可選常量和變量一起使用。如果代碼中的常量或變量需要能夠應對某些條件下缺少值的情況,則始終將其聲明爲適當類型的可選值 。
但是你怎麼能把'nil'分配給'Optional'而不是其他任何東西?我可以用相同的行爲來定義'MyOptional'嗎? –
@丹:我已經更新了涵蓋這個問題的答案。這似乎是不可能的。 – deepmax
謝謝。感覺很好,探索新的東西:-) –