РАЗРАБОТКА ПРИЛОЖЕНИЙ ДЛЯ iOS

Когда вы пишете код на Swift, пишите код на Swift

Не забывайте об удобных методах и конструкциях, которые предоставляет вам Swift.

Swift имеет множество уникальных (и не настолько уникальных) конструкций, методов, подходов, которых нет в других языках. В результате многие люди, переходящие на Swift с другого языка, не используют его возможности.

Вот список вещей, которые многие люди игнорируют при работе с приложениями для iOS.

For case:

Если у вас есть [Any]array или NSOrderedSet, вам не нужно проверять тип каждого элемента в if let element = element as? SomeType { внутри цикла for. Есть более простой подход:

Не забывайте о enumerated ()

Забудьте о for i in 0..<object.count, в большинстве случаев он вам не понадобится. Но если вам нужно получить индекс каждого элемента (вместе с самим элементом), используйте enumerated():

Можно использовать for i in 0..<object.count, когда это удобно, но помните, что в большинстве случаев это не лучший подход.

первый (где:):

filter - один из самых популярных методов в Swift. Однако время от времени его используют там, где это не должно быть.

Например, когда вам нужно получить первый элемент, удовлетворяющий условию, вы можете использовать first(where: ):

содержит (где:):

История с этим методом почти такая же, как и выше:

пустой

Если вам нужно проверить, пуста ли коллекция, не проверяйте, сколько в ней элементов:

для каждого

Метод forEach часто бывает полезен, когда вы хотите выполнить какое-то простое действие и не нуждаетесь в сложной логике с break и / или continue:

Использование keyPaths в map, compactMap, filter и т. Д.

В таких случаях могут пригодиться KeyPaths. И не забывайте объединять методы в цепочку:

сторожить

guard - одно из самых популярных утверждений, но иногда о нем забывают. Не забудьте использовать его, так как он может помочь вам, если в вашем коде много потенциальных if:

отложить

defer тоже пригодится. Все, что вы помещаете в блок defer, будет вызываться после return:

Вычисляемые свойства против методов

Иногда вместо создания метода вы можете захотеть создать вычисляемую переменную. Это зависит от конкретного контекста, но убедитесь, что выбрали правильный. Если вам нужно явно показать, что вы выполняете какие-то вычисления, используйте метод, в противном случае рассмотрите переменную:

По возможности избегайте себя

Нет необходимости засорять ваш код словом self. Если его можно опустить, его следует опустить. Используйте его только тогда, когда это необходимо или когда это сделает ваш код более понятным.

Не переименовывайте переменные при разворачивании

Используйте возможности расширений протокола

Вы можете использовать расширения для реализации методов вашего протокола по умолчанию:

Протоколы против подклассов

Попробуйте использовать протоколы вместо наследования. Протоколы позволяют сделать ваш код более гибким, поскольку вы можете согласовать свой класс не только с одним протоколом. Кроме того, structs и enums не могут использовать подклассы, но они могут быть согласованы с протоколами, что делает протоколы еще более полезными.

Структуры против классов

По возможности старайтесь использовать структуры вместо классов. Они безопаснее в многопоточной среде, быстрее, у них есть метод init по умолчанию и многие другие преимущества. Но поймите разницу и имейте в виду, что structs - это тип значения, а classes - ссылочный тип, что означает, что каждый экземпляр struct имеет свою собственную уникальную копию, в то время как каждый экземпляр class имеет ссылку на одну единственную копию данные.

Ссылка на официальную документацию, объясняющую, как выбирать между ними, находится здесь: https://developer.apple.com/documentation/swift/choosing_between_structures_and_classes.

Используйте вышеупомянутые предложения, особенно если вы новичок в Swift. И не стесняйтесь делиться своими методами, подходами, идеями, которые помогут вам по-настоящему использовать Swift при написании кода на Swift, и я включу их в следующую часть.