Support for dictionary literals has today been added to Objective-J 2.0 in Cappuccino master. A dictionary literal allows you to allocate a CPDictionary
with specific contents in a concise and readable manner.
The syntax is @{ key: value, key2: value2, ... }
, which is equivalent to the same feature in Objective-C. Here’s an example from CPBox
:
Before
return [CPDictionary dictionaryWithObjects:[[CPNull null], [CPNull null], 1.0, 3.0, CGSizeMakeZero(), 6.0, [CPNull null], CGSizeMakeZero()]
forKeys:[ @"background-color",
@"border-color",
@"border-width",
@"corner-radius",
@"inner-shadow-offset",
@"inner-shadow-size",
@"inner-shadow-color",
@"content-margin"]];
After
return @{
@"background-color": [CPNull null],
@"border-color": [CPNull null],
@"border-width": 1.0,
@"corner-radius": 3.0,
@"inner-shadow-offset": CGSizeMakeZero(),
@"inner-shadow-size": 6.0,
@"inner-shadow-color": [CPNull null],
@"content-margin": CGSizeMakeZero(),
};
The new syntax is much easier to read, and the relationship between each key and value pair is clear. The format should be familiar from languages such as Python and, of course, JavaScript itself.
Regular JavaScript dictionaries will continue to work as normal.
// Objective-J Dictionary Literal
var a = @{ @"count": 2 };
// JavaScript Object
var a = { @"count": 2 };
For the sake of completeness, Objective-J 2.0 also implements array literals: @[1, 2, 3]
. Since Objective-J already bridges CPArray
and JavaScript arrays, this is equivalent to just [1, 2, 3]
. This is similar to how @"string" == "string"
in Objective-J today.
The dictionary literals feature is available today if you build from source.