Ich denke, die Antwort ist:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html
Blick insbesondere auf dem Abschnitt mit dem Titel "Prinzip der Zugriffsebenen Guiding", die die beiden folgenden Punkte enthält:
i. Eine öffentliche Variable kann nicht als interner, file-privater oder privater Typ definiert werden, da der Typ möglicherweise nicht überall verfügbar ist, wenn die öffentliche Variable verwendet wird.
ii. Eine Funktion kann keine höhere Zugriffsebene haben als ihre Parametertypen und den Rückgabetyp, da die Funktion in Situationen verwendet werden kann, in denen ihre Konstituenten nicht für den umgebenden Code verfügbar sind.
Ich denke, Ihr Code fällt unter die zweite Bedingung, da der Parameter für die Beobachterfunktion didSet geöffnet ist, aber die Funktion selbst versucht, eine Dateiprivatvariable zu ändern.