
A Video Walkthrough of Swift Fundamentals - mckoss
https://www.firebase.com/blog/2015-01-23-video-walkthrough-swift-fundamentals.html?video
======
katfang
This is my first screencast! I had a lot of fun making it, and I hope you
enjoy it.

One of my favorite parts of Swift is the optional concept, which separates
variables which are never null from variables that can sometimes be null. This
helps prevent errors from trying to use objects that don't exist. The syntax
involves `!` and `?` which can make your code seem excited and confused, but
it's definitely a step toward making your code safer!

For example, say you have a UI element that _might_ have a label. If indeed it
has a label, and you wanted to set the color of it to red, you can store your
label like this:

`var label: UILabel?`

which signals that it may not exist. Then to set the color, you would do this:

`label?.textColor = UIColor.redColor()`

The question mark says if it isn't there, then don't assign the new color. We
don't need to check the case where the label does not exist because Swift
automatically does it for us!

~~~
coolsunglasses
>One of my favorite parts of Swift is the optional concept

What if you need the fallback value to be an error possessing information
about what went wrong?

    
    
        data Maybe a = Just a | Nothing
    
        data Either a b = Left a | Right b

~~~
katfang
I agree! Eithers are cool, too. What I'm really excited about is that these
sorts of concepts are starting to find their way into languages like Swift.
Getting built-in support for Eithers would be super awesome.

In the meantime, you can vaguely simulate it with named tuples.

let response = (error: "Could not connect to server", success: false)

It's not quite the same, but at least there's an easy way to bundle your data
together.

edit: I like Someone's suggestion to use and discussion about using enums as
union types below.

~~~
Someone
Other approach: use enums as union types. From
[https://developer.apple.com/library/ios/documentation/Swift/...](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html):

    
    
      enum Barcode {
        case UPCA(Int, Int, Int, Int)
        case QRCode(String)
      }
    

_This can be read as:

“Define an enumeration type called Barcode, which can take either a value of
UPCA with an associated value of type (Int, Int, Int, Int), or a value of
QRCode with an associated value of type String.”_

So, you can do

    
    
      enum ResultOrError {
        case Result(ReturnValue)
        case Error(int,String)
      }
    

Unfortunately, enums and generics do not mix, AFAIK, so it looks clumsy.

I think the reason for the special syntax of '?.' is that the designers think
it is a very common case, at least in Swift programs.

And yes, I would like to see a better syntax for that, too. A generalization
of C's short-hand 'if'

    
    
       flag ? trueExpression : falseExpression;
    

For switch statements would be cool.

~~~
eridius
Enums and generics mix just fine in theory. Rust is a good example of this,
with the `Result<T,E>` type. But at the moment in Swift if you try this you
get "error: unimplemented IR generation feature non-fixed multi-payload enum
layout". Presumably this will be supported at some point.

------
barosl
> One of my favorite things is that methods are way less awkard than
> Objective-C. It looks, you know, like other programming languages now.

This made me laugh. I've also suffered from them. I tried to convince myself
to like them when I started learning Objective-C, but soon I failed.

------
emehrkay
That was great. Didn't think that Id watch the whole thing, but now I want to
see more. She put on an awesome presentation and the REPL worked really well
in this format. Thank you for putting this together and please do more (if you
have the time, of course).

------
zyxley
One of the things I find really interesting about Swift is that you can
execute uncompiled Swift files as shell scripts, similar to how you can with
Rust.

------
lukasm
15:36

> I'll execute if loop

What is if loop? Do you mean if statement?

------
torrance
Great intro. But more importantly, where did you learn to type at that speed??

