[swift-evolution] Proposal: CustomConvertible protocol
Stepan Hruda
stepan.hruda at gmail.com
Fri Dec 4 08:15:57 CST 2015
This is not how *LiteralConvertible protocols work, though. You can only initialize variables with specific literal values recognized by the parser, it never magically casts a type to a different type for you. Similar implicit casts in my opinion confuse whoever reads the code afterwards.
```
class SomeConvertible: BooleanLiteralConvertible {
typealias BooleanLiteralType = Bool
let boolean: Bool
internal required init(booleanLiteral value: SomeConvertible.BooleanLiteralType) {
self.boolean = value
}
}
func getBoolean() -> Bool {
return false
}
let validConvertible: SomeConvertible = false
// Line below doesn’t compile
let invalidConvertible: SomeConvertible = getBoolean()
```
On Fri, Dec 4, 2015 at 8:51 AM, Adrian Zubarev
<adrian.zubarev at devandartist.com> wrote:
> We have finally a corner where people can share their ideas on how Swift can be improved, and I’m glad my ideas might be part of this fun.
> Swift introduced a few Convertible protocols, but it still needs some more If you ask me.
> Something like this:
> public protocol CustomConvertible {
>
> typealias CustomType
>
> public init(value: Self.CustomType) // or in a better way I can't come up with
> }
> But it should work in a way that we could create more different types like enums and ErrorType.
> protocol AConvertible: CustomConvertible { /* some stuff here*/ }
> protocol BConvertible: CustomConvertible { /* some stuff here*/ }
> struct A {
> var foo: Int = 0
> }
> struct B {
> var boo: String = "Hello World"
> }
> struct C: AConvertible, BConvertible {
>
> typealias CustomAType = A
> typealias CustomBType = B
>
> var magical: SomeType
>
> init(value: CustomAType) {
> // implement it
> }
>
> init(value: CustomBType) {
> // implement it
> }
> }
> //===========================
> let firstC: C = A() // this is what I'm missing in Swift
> let secondC: C = B() // this would be a great syntax sugar
> What do you think?
> —
> Regards Adrian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151204/0fbd63a3/attachment.html>
More information about the swift-evolution
mailing list