Ik doe heel veel in C# ook. C# was voorheen mijn favoriete taal, maar ik loop al een tijdje om non-nullable references te zeuren en het is ook een van de
meest favoriete changes van andere users maar volgens de ontwikkelaars (in een podcast die ik niet meer kan vinden) wordt het erg lastig om dat nog toe te voegen. ReSharper ondersteunt het een beetje met annotaties.
Qua expressiviteit lijken ze wel sterk op elkaar. Weliswaar is flapMap, filter en bijvoorbeeld reduce wel wat anders dan LINQ maar het lijkt heel sterk op elkaar als je de cosmetische eigenschappen even negeert. Swift heeft buiten var ook let wat een immutable variant is (NSArray vs NSMutableArray) en performance voordelen heeft.
Veel nieuwe features in C# zijn allerlei shorthands zoals object?.something?.maybe?, Swift heeft het allemaal al. Getters / setters met default values, willSet en didSet (zeer handig voor outlets waar je nog even wat aan wil toevoegen, bijvoorbeeld een UITableView met automatische rijhoogte).
C# werkt wat meer old school met puntkomma's aan het einde van iedere regel, gebruikt wat meer accolades en haakjes. Swift heeft een guard statement wat specifiek gericht is op het checken van parameters, vaak heb ik een guard / let / where / else statement van een aantal regels voordat ik iets doe, C# heeft geen specifieke check logica.
C# heeft attributes en Swift heeft ze niet. Dat is echt een groot gemis.
Enums zijn enorm sterk onder Swift, ze kunnen functies hebben en allerlei onderliggende datatypes.
Swift werkt met ARC en C# met garbage collection. Afhankelijk van het scenario is meestal ARC sneller en voorspelbaarder.
Initializers zijn strikter onder Swift dan onder C#. Als je unwrapped values wil in je class / struct dan moet je alles opzetten in je init method.
Ik ben nog wel wat dingen vergeten waarschijnlijk....