Wie andere gesagt haben, gibt es in Swift keine Möglichkeit, genau das zu tun, was Sie heute wollen.
Eine Alternative ist die Verwendung einer Erweiterung in einer anderen Datei, um GridControllerModel als verschachtelten Subtyp von GridController hinzuzufügen. z.B.
//GridControllerModel.swift
extension GridController {
struct GridControllerModel {
let propertyOne:String
let propertyTwo:String
}
}
Auf diese Weise können Sie Ihre GridController Klasse in einer eigenen Datei so etwas wie erklären:
//SomeOtherClass.swift
var nested = GridController.GridControllerModel()
:
var model = GridControllerModel()
Doch der Rest der Anwendung noch die GridControllerModel Art wie diese zugreifen kann
So erreichen Sie einige Trennung, indem Sie den Modelltyp Subtyp von GridController, aber es ist nicht wahr, Zugriff con steuern Auf der positiven Seite wird es nicht in der Code-Vervollständigung außerhalb der GridController-Klasse als "GridControllerModel" angezeigt, Sie müssten zuerst "GridController" und dann "." Um den Subtyp "GridController.GridControllerModel" zu sehen
Es ist auch erwähnenswert, dass eine zusätzliche Zugriffskontrolle Ebene derzeit überprüft wird und wahrscheinlich in der nächsten Version von Swift sein wird (3.0):
https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md
Unter der Annahme, dieser Vorschlag angenommen und umgesetzt wird, würden Sie in der Lage sein, Ihre erklärt Subtyp wie folgt zu aktualisieren:
//GridControllerModel.swift
local extension GridController {
struct GridControllerModel {
let propertyOne:String
let propertyTwo:String
}
}
(Man beachte die "local" Stichwort oben jetzt). Dies würde den GridControllerModel-Typ für alle Klassen außer GridController und allen Erweiterungen von GridController unsichtbar und nicht zugänglich machen.
So, ich würde empfehlen, dass Sie diesen verschachtelten Subtyp Ansatz heute betrachten, denn wenn Swift 3.0 später in diesem Jahr ankommt, wird es wahrscheinlich unterstützen, was Sie wollen, indem Sie einfach ein Schlüsselwort vor Ihrer Subtyp-Deklaration hinzufügen. Und in der Zwischenzeit bekommst du auch die Trennung, die du willst.
Nein. Der richtige Weg, dies in Swift zu tun, besteht darin, sie in die gleiche Datei zu schreiben. –