What does "String? = nil" mean here?

init(name: String, prefix: String? = nil) {

  self.name = name

  self.prefix = prefix

}


This initializer has 2 parameters, one is called name which takes String values, and I'm a little confused by the other one. What does String? = nil mean? the prefix parameter takes an optional String that equals nil ? Doesn't make any sense to me, can someone explain what it means?

Accepted Answer

This syntax is how you define default value for parameters.


The purpose to set a default value is that you can call int without the last parameter (works only for parameters at the end of parameter list; but there cas be several of them).


Imagine this is an init for

struct MyStruct {
  var name : String
  var prefix: String?

  init(name: String, prefix: String? = nil) {
    self.name = name
    self.prefix = prefix
  }
}


With the default initializer, you can call


let t = MyStruct(name: "DogRider", prefix: "Hello")
let u = MyStruct(name: "DogRider")     // prefix will automatically be nil


print("t = ",  t)
print("u =", u)

gets you

t = MyStruct(name: "DogRider", prefix: Optional("Hello"))

u = MyStruct(name: "DogRider", prefix: nil)

Very helpful! I get it now, thank you!

What does "String? = nil" mean here?
 
 
Q