В: Безопасно ли это?
Хотя этот код выглядит так, как будто он работает в большинстве случаев, определенно есть возможность для некоторых улучшений.
Если бы это был обзор кода, я быскажем, использование неявно развернутого myCustomType!
- опасный выбор.Ваша функция должна возвращать myCustomType
, поэтому она должна действительно делать это в каждом случае, и неявно развернутая переменная принесет больше вреда, чем пользы.
Кроме того, я не вижу здесь необходимости в default
случае.Позвольте swift выполнить его исчерпывающую проверку, чтобы вы знали, когда забыли реализовать кейс.Использование default
подрывает это.С тем, что вы написали, вызов pageData.page3.initPage()
приведет к сбою программы, потому что нет никакого случая для .page3
, поэтому неявно развернутый mctData
будет равен нулю.
Если вам абсолютно необходимо просто "замолчать""компилятор, вы можете предоставить fatalError()
как реализацию любого случая, который вы пока не можете реализовать.Это было бы предпочтительнее в моей книге.
О статической функции: хотя в этом нет технической проблемы, это не будет моим подходящим решением.Трудно сказать наверняка, потому что я не знаю, что делает этот код, но я, вероятно, начну с этой реализации внутри класса pageData
как вычисляемое свойство, например:
var defaultCaption: String {
switch self {
case .page1: // something, something "page1"
// etc. for the rest of the cases
}
}
Наконецтот факт, что все имена классов и констант не имеют заглавных букв (например, PageData,
MyCustomType`), делает приведенный здесь код очень необычным и несколько сложным для чтения.Я бы посоветовал взглянуть на язык Рекомендации по разработке API , если вы этого еще не сделали.Следование стандартам сообщества облегчит выполнение вашего кода для тех, кто еще не знаком с ним.Включая людей на переполнение стека :)