[swift-evolution] TreeLiteralConvertible
Milos Rankovic
milos at milos-and-slavica.net
Thu Apr 14 16:03:00 CDT 2016
> On 14 Apr 2016, at 21:36, John McCall <rjmccall at apple.com> wrote:
>
> No, you just need Tree to conform to both ArrayLiteralConvertible and IntegerLiteralConvertible, and it implements the latter by building a Value out of it.
You mean this:
public enum IntTree {
case Leaf(Int)
case Branches([IntTree])
}
extension IntTree : ArrayLiteralConvertible {
public init(arrayLiteral elements: IntTree...) {
self = .Branches(elements)
}
}
extension IntTree : IntegerLiteralConvertible {
public init(integerLiteral value: IntegerLiteralType) {
self = .Leaf(value)
}
}
let tree: IntTree = [[], 1, [2, 3], [[4, 5], [6, 7], [8, 9]]]
> you'll simply have to make your Tree less generic
Yep, that’s the rub… With generic trees you can express yourself freely, whether you feel like:
import SpriteKit
let actionTree: Tree<SKAction> = [
◊.waitForDuration(1),
[
◊.fadeInWithDuration(1),
◊.scaleTo(1, duration: 1)
],
◊.playSoundFileNamed("TaDa", waitForCompletion: false)
]
… or:
let johnny: DictionaryTree<String, JSONValue> =
[
"name": ◊"Johnny Appleseed",
"age": ◊25,
"address": [
"house_number": ◊21,
"street": ◊"2nd Street",
"city": ◊"New York"
]
]
I’d just love to get rid of that prefix operator…
milos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160414/2a13170e/attachment.html>
More information about the swift-evolution
mailing list