I went to an 'Azure Mobile DevCamp' event for iOS a couple of days ago. It was sponsored by Microsoft but run by someone otherwise unaffiliated who ran a mobile development shop coding in each platform's native language.<p>The session was interactive/follow along, the instructor led in swift and I decided to try following along using C#/Xamarin iOS (disclosure: I use Xamarin.iOS daily and am a big fan of C#). On iOS I had worked for a couple of years in obj-c before moving to Xamarin, but hadn't touched swift. Having read comparison articles similar to this, my otherwise uninformed opinion was that swift looked to provided a far more reasonable experience, similar to C# - to the point that I wondered whether it was worth paying the fee for Xamarin to avoid the archaic objective c language. However, there were a few things from the demo that changed my mind (some are apple ecosystem, some are swift):<p>- no first class support for package management, and adding references to to libraries by hand can still be error prone and frustrating. We spent 10 minutes getting the room set up with their cocoapods - lucky me I had NuGet and in a few clicks had the packages installed.
- no `await`-style capability - it seems small but nested callbacks is not something I want to have to deal with anymore, and it makes certain patterns unwieldy.
- no LINQ query provider style support - making a call to the azure mobile service with a filter and sort clauses required newing up awkward predicate and sort objects and attaching them to a query before running (which then, again, required a callback!). In C# you could use the same syntax you would use if the collection were local - `await table.Where(i=> i.Name.Contains("Bob")).OrderBy(i=> i.LastName).ToListAsync()` - and the clauses would be transparently translated into parameters for the service call.
- Lots of "crashes" in the IDE while writing swift code, where the compiler would bomb out and syntax highlighting etc. would be disabled while it sorted itself out again.<p>Swift still seems to be a huge improvement over obj-c, and some of these will be improved as time goes by, but fundamental features like await make a big difference, especially working on mobile where you are often waiting on network calls, user activity etc. And that's all before you even touch the topic of code sharing.