[swift-users] default struct initializer internal even if class declared public

davelist at mac.com davelist at mac.com
Wed Jan 18 09:33:13 CST 2017


I’m teaching an iOS with Swift this semester and one of my students pointed out that:

struct Person {
   var firstName: String
   var lastName: String
}

does create a default initializer that you can call as:
p = Person(firstName: “Dave”, lastName: “Reed”)

but if you write:

public struct Person {
   var firstName: String
   var lastName: String
}

The default initializer is still internal so if you want it to be public, you have to write it yourself (i.e.)

public struct Person {
   var firstName: String
   var lastName: String

   public init(firstName: String, lastName: String) {
      self.firstName = firstName
      self.lastName = lastName
   }
}

Is there a way around this (other than writing it)? We both agree it would be reasonable/nice that the default initializer have the same protection level as the struct itself.

Thanks,
Dave Reed



More information about the swift-users mailing list