In a strongly typed language, such as Swift is, type inference is greatly
appreciated as it declutter the instance type definition.

  

For example, in the following statement, the compiler easily deduct the type
of `aString` by the return type of `String.init()`

  

```

let aString = String()

```

  

Optional are generic enum which can contain a value of a generic type or nil
(https://github.com/apple/swift/blob/master/stdlib/public/core/Optional.swift)

  

Sometime you may want specify that the instance is of type optional in which
even if you are a the same time assigning a value to this instance.

In which case you loose the type inference mechanism and you have to define
both (the optionality as well as the type).

For example, you may want specify an optional String with a default value.

  

```

var a:String? = String()

// or

var b = String() as String?

// or

var c:Optional<String> = String()  

```

  

But the compiler can already infer the variable type from this assignment, it
just miss the "optionality" of the variable.

It would be nice to be able to express this.

  

Then for, I propose the following syntax evolution:

  

```

var a:? = String()

// and/or (not recommended because more prone to typo and unclear...)

var a = String() as?

```

  

This would allow for more synthetic optional declaration.

  

I've draft a proposal on my `swift-evolution` fork:

https://github.com/huguesbr/swift-evolution/blob/optionality-type-with-type-
inference/proposals/0057-optionality-type-with-type-inference.md

  

Let me know what you think.

  

  

Hugues BERNET-ROLLANDE

  

\--

hug...@xdev.fr

http://www.xdev.fr

http://www.linkedin.com/in/huguesbr

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to