Home > Blockchain >  Difference between print(nil) and print(name) when var name: String? = nil
Difference between print(nil) and print(name) when var name: String? = nil

Time:02-02

I'm a student who's new in Swift.

While I'm studying about the Optional, I got curious about the keyword nil, so I tried some experiment with it. I'm using the Swift version 5.5.

As you can see in the image below, if I assign nil to a optional variable (which I named 'name') and then print it with print(name) and print("(name)") (string interpolation), I got nil on the console in both cases. (Line 5, 9)

But when I print nil without the optional variable, which I printed it with print(nil) and print("(nil)"), I got an error on both cases. (Line 7, 11)

enter image description here

I expected them all to print out nil but they didn't. I really want to know the difference between those cases.

CodePudding user response:

Interesting question actually. If you look at the Swift documentation:

Swift also introduces optional types, which handle the absence of a value. Optionals say either “there is a value, and it equals x” or “there isn’t a value at all”.

So think of it as nil is the absence of some value. As an example if you have:

var name: String?

name can either be a string value, or the absence of a string value.

So it makes no sense to try and print nil explicitly since you already know that it's the absence of a value, however, it makes sense to print name to check if it has a value and in that case what it is, or if it has no value.

The print function is telling you that you never just want to work with nil, and it makes no sense to print it explicitly, so the compiler prevents you from doing it.

CodePudding user response:

The error message in XCode tells you exactly what happens: nil is not compatible with expected argument type Any - the print function expects a non-nil argument, as does the string interpolation with \(),

CodePudding user response:

In Swift, when you have a variable name defined as var name: String? = nil, you are defining a nullable string. This means that the name variable can either hold a string value or be nil.

When you use print(nil), you are printing the literal value nil, which is a special value in Swift that represents the absence of a value. This will result in nil being printed to the console.

  • Related