RemObjects Silver adds a few features to the Swift language to make it fit better on all the platforms it supports. We try to keep these extensions to a minimum, and tastefully within the design aesthetics of the Swift language.
Where additional keywords are needed, we follow the C-style language convention of prefixing these with two underscores ("
__") to avoid conflict with future changes to the official Swift language.
Partial Classes allow a single class (or struct) to be declared spanning multiple source files.
Static Classes are classes where all members are static. Silver provides a convenient shortcut to mark a class as static instead of having to mark each individual member.
Custom Cast Operators
Cast Operators allow you to implement custom type casting behavior for your own types, bot. for implicit and explicit (
Support for .NET-style multi-cast Events is provided to allow Swift code to fully participate in the .NET event system.
New in Elements 9.3, the
__field keyword works symmetrical to
var to declare a field inside a class or struct. Unlike
var, the field will be implemented as plain low-level field, and not as property. This distinction can be important when, for example, dealing with Reflection on .NET.
__await keyword is supported on .NET to unwrap asynchronous calls, similar to how
await works in Oxygene and C#. See the Await Expressions topic for more details.
Similar to C# or Oxygene,
__lock Statement can be used to ensure thread-safe access to a block of code.
RemObjects Silver has full support for Mapped Types, which are inlined types useful to create cross-platform wrappers with zero overhead. While you won't often implement your own mapped types, you will likely use existing ones, for example from the Sugar library.
Inheritance for Structs
In RemObjects Swift,
structs can specify an ancestor, allowing a newly declared struct to inherit the fields and methods of its base struct. Unlike classes, structs are not polymorphic, and members cannot be virtual or overriden.
Aspects & Attributes
Aspects are special attributes that influence how the compiler emits the final executable. Aspects are covered in more detail in their own section, including how to use them and how to create your own.
Class Contracts allow code to become self-testing, with Pre- and Post-Conditions for methods and type-wide Invariants.
- Not meant for user code, the
¡(inverted exclamation point) suffix operator can be used to mark a type as being nullable only if it is a reference type – essentially giving it the same Nullability behavior of the type name being used on its own in Oxygene or C#.
- Silver allows named parameters in attributes, as well as attribute scope prefixes using
__outcan be used similarly to
inout, but parameters will be one-directional.
- Silver supports the same Oxygene and C#, as well as a Swift-specific
@main:attribute prefix for applying attributes to the entry point.
- For symmetry with #available, a special
#defined()syntax is provided around the
defined()function for conditional compilation.
Exception handling is a crucial feature on the .NET and Java/Android platforms (and frankly, also comes in very handy on the Cocoa platform as well). Silver extends the Swift 2.0 error handling syntax to also support for exception handling on all platforms, as covered in more detail in the Exceptions and Error Handling topic.
RemObjects Swift originally provided an interim syntax for exception handling in Swift 1.0 that has been being deprecated moving forward, in favor of the new
Note that this Exception Handling Language Extension we provided for Swift 1.0 has been deprecated as of Elements version 8.2, and will be removed in a future update. Please refer to the Exceptions and Error Handling topic for the new way to deal with exceptions and errors consistently.