This is purely additive and would not be eligible for Swift 3. 
gist: https://gist.github.com/erica/c92f6ab115af89d5c4b9161487df6a3c

-- E

Extending Swift Literals

Proposal: TBD
Author: Erica Sadun <http://github.com/erica>
Status: TBD
Review manager: TBD
 
<https://gist.github.com/erica/c92f6ab115af89d5c4b9161487df6a3c#introduction>Introduction

This proposal expands Swift's language literals to include common 
cross-platform concepts that need not require.

 
<https://gist.github.com/erica/c92f6ab115af89d5c4b9161487df6a3c#motivation>Motivation

A Swift literal represents a fixed value in source code. A literal can be a 
string, a number (for example an integer), a compound value (such as an array), 
or one of several predefined "playground" literals including colors, resource 
file paths, and resource images.

Swift literals do not have types. They are universal representations that are 
evaluated and their types inferred from the context in which they are used. 
Because their nature is typeless, the same color literal can initialize 
UIColor, NSColor, and SKColor instances. The type cannot be inferred from the 
source without the context of its destination.

let color = #colorLiteral(red: 0.8100712299, green: 0.1511939615, blue: 
0.4035313427, alpha: 1)
 
<https://gist.github.com/erica/c92f6ab115af89d5c4b9161487df6a3c#detailed-design>Detailed
 Design

Namespace redesign
Kind    Literal Parameters
Color   `#literal.color(red:, green:, blue:, alpha:)`   floating point values
Image   `#literal.image(resourceName:)` String with resource name
File    `#literal.file(resourceName:)`  String with resource name
General
Kind    Literal Parameters
Sound   `#literal.audio(resourceName:)` String with resource name
URL     `#literal.url(string:)`, `#literal.url(filePath:)`      String with 
resource location
Font    `#literal.font(face:, size:)`   string, floating point
Date    `#literal.date(timeInterval:)`  floating point offset from Unix epoch
Unicode `#literal.unicode(name:)`       Official unicode name, e.g. 
`#literal.unicode(name:"DOG FACE")`
Geometry
Kind    Literal Parameters
Point   `#literal.point(x:, y:)`, `#literal.point(x:, y:, z:)`, 
`#literal.point(x:, y:, z:, w:)`        floating point values
Vector  `#literal.vector(dx:, dy:)`, `#literal.vector(dx:, dy:, dz:)`, 
`#literal.vector(dx:, dy:, dz:, dw:)`    floating point
Size    `#literal.size(width:, height:)`, `#literal.size(width:, height:, 
depth:)`      floating point
Rect    `#literal.rect(x:, y:, width:, height:)`        floating point
Affine Transform        `#literal.affineTransform(a:,b:,c:,d:,tx:,ty:)`, 
`#literal.affineTransform(translateX:, translateY:)`, 
`#literal.affineTransform(scaleY:, scaleY:)`, 
`#literal.affineTransform(rotation:)`,     floating point
Bezier Path     `#literal.bezier("M92.21,24.29H75L73,17a8.32,8.32, 
0,0,0-8.27-6.74H34.55A7.69,7.69,0,0,0,27,16.6l-2.08 4z")`    String with SVG 
path notation
 
<https://gist.github.com/erica/c92f6ab115af89d5c4b9161487df6a3c#not-included>Not
 included:

Attributed Strings: I would like to see a way to define attributed strings 
(using some system like CSS/HTML) but could not think up a simple 
representation similar to the others mentioned in the preceding table.

JSON Literals: Again, probably too complex and possibly not worth their weight. 
If they could exist, they'd have to be imported via a resource or URL and 
transformed to a local type.

 
<https://gist.github.com/erica/c92f6ab115af89d5c4b9161487df6a3c#impact-on-existing-code>Impact
 on Existing Code

This proposal is purely additive.

 
<https://gist.github.com/erica/c92f6ab115af89d5c4b9161487df6a3c#alternatives-considered>Alternatives
 Considered

Using distinct literal names without subsuming them into a namespaced umbrella.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to