5

Should I use private or fileprivate to declare global variables/consts in Swift 3? e.g.

fileprivate let a = 1
fileprivate class SomeClass {
    fileprivate b = 0
}

Or

private let a = 1
private class someClass {
    fileprivate b = 0
}
frogcjn
  • 819
  • 5
  • 21
  • Possible duplicate of [What is a good example to differentiate between fileprivate and private in swift3](http://stackoverflow.com/questions/39027250/what-is-a-good-example-to-differentiate-between-fileprivate-and-private-in-swift) – Nirav D Sep 28 '16 at 06:50
  • 2
    @NiravD thanks your quick comment, but it does not mention variable in global scope. it only mentions variable in the enclosing declaration. – frogcjn Sep 28 '16 at 06:52
  • May be this will help you https://cocoacasts.com/what-is-the-difference-between-private-and-fileprivate-in-swift-3/ – Nirav D Sep 28 '16 at 06:59
  • @NiravD this article is not mentioned global declaration neither. – frogcjn Sep 28 '16 at 07:06
  • 3
    As far as I can see, it makes no difference at all for declarations at the file level. – Martin R Sep 28 '16 at 07:08
  • @MartinR so Apple should tell us which is better. – frogcjn Sep 28 '16 at 07:09
  • 1
    You can ask at https://lists.swift.org/mailman/listinfo/swift-users. – Martin R Sep 28 '16 at 07:11
  • 2
    And you did: https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20160926/003450.html. – Martin R Sep 28 '16 at 07:20

1 Answers1

7

It really makes no difference at file level, whether you use private of fileprivate, access control will be the same, for example constants defined this way will be only usable in that file.

Same can be said for other modifiers, in certain cases, internal and private become the same, eg. same single file module.

For all intents and purposes in this case you should use fileprivate, because it more clearly states the intent -> you want to use this in whole file.

It is quite reasonable to expect in future versions of swift (there are some proposed changes in swift 4), that there will indeed be change in these modifiers, and fileprivate and private will have different scope in this case.

MegaManX
  • 8,766
  • 12
  • 51
  • 83