<div dir="ltr">The difference between  nil  and  .none  is that the former is more &quot;generic&quot; than the latter.<div><br><div>NilLiteralConvertible protocol expresses types that can contain &quot;null&quot; as legal values. `nil` does not have a type, it&#39;s just a token that is casted to whatever NilLiteralConvertible type is expected. It is used in JSON libraries, for example:</div></div><div><br></div><div>let tree: JSON = [&quot;name&quot;: &quot;Alex&quot;, &quot;age&quot;: 20, &quot;email&quot;: nil]</div><div><br></div><div>Here, nil would be inferred to have our custom JSON type.</div><div>The same example with  none  would look a bit more weird:</div><div><br></div><div>let tree: JSON = [&quot;name&quot;: &quot;Alex&quot;, &quot;age&quot;: 20, &quot;email&quot;: none]<br></div><div><br></div><div>None of what type? Of String? Of Int? Of JSON? There are no optionals in this code. And a &quot;null&quot; present in JSON is different than no JSON in Swift.</div><div><br></div><div>Optional is the most significant example of NilLiteralConvertible, but there are other users that would suffer from renaming. We could remove NilLiteralConvertible at all, but look at the example in this case:</div><div><br></div><div>let tree: JSON = [&quot;name&quot;: &quot;Alex&quot;, &quot;age&quot;: 20, &quot;email&quot;: JSON.nullValue]<br></div><div><br></div><div>That would hurt immersion of the DSL.</div><div><br></div><div>I think some Core team member told that they intentionally keep two ways of handling Optional: one using nil, and the other treating it like other enums.</div><div><br></div><div>- Anton</div></div>