Стиль программирования Swift

Я видел исходный код на github, например: функциональный-быстро

Мы видим, что есть определение структуры под названием Ship, и в ней есть некоторая переменная. Из следующего кода мы видим, что в нем также есть некоторая функция. Он написан в следующем стиле:

struct xxx {
}

extension xxx {
    func yyy() {}
}

Я также могу определить структуру в следующем стиле:

struct xxx {
    func yyy() {}
}

Так чем отличается два стиля? Есть ли руководство по быстрому программированию?


person leizh00701    schedule 05.01.2016    source источник
comment
Проверьте этот вопрос. Я думаю, что это охватывает ваш вопрос.   -  person 0x416e746f6e    schedule 05.01.2016
comment
Это помогает организовать ваш код в группы связанных методов, в частности, при принятии протоколов (как объяснено в упомянутых вопросах и ответах). Рекомендуется здесь: github.com/raywenderlich/swift-style-guide#protocol-conformance .   -  person Martin R    schedule 05.01.2016
comment
Как именно вы группируете методы в расширения, зависит от вашего личного вкуса. Я бы не стал определять расширение для метода каждого, как в примере кода, на который вы ссылаетесь.   -  person Martin R    schedule 05.01.2016
comment
Я не уверен, что это дубликат этого вопроса, потому что в этом вопросе говорится о расширениях с протоколами, которые имеют очевидные преимущества, а это нет.   -  person GoatInTheMachine    schedule 05.01.2016
comment
@GoatInTheMachine: Насколько я понимаю, оба вопроса касаются использования расширений (а не определения всех методов непосредственно в определении структуры/класса). В другом вопросе не упоминаются протоколы, поэтому кажется, что тот же вопрос ко мне. – Это ответы на другой вопрос, которые говорят о том, что соответствие протоколу является основным вариантом использования, а также организация кода: Для меня это кажется совершенно разумным, поскольку вы можете использовать расширения для предоставления различных части логики в разные расширения.   -  person Martin R    schedule 05.01.2016


Ответы (2)


из вашего примера первая представляет собой базовую структуру с расширением

struct xxx {
}

extension xxx {
function yyy() {}
}

другой — это структура со встроенной функцией.

struct xxx {
function yyy() {}
}

представьте, что вы не можете изменить исходную структуру по какой-либо причине, но вы все равно хотите выполнять функцию yyy() -> вы можете расширить класс для вызова функции yyy() без изменения самого класса (или изменения его поведения в другом месте). в вашей программе)

«Расширения могут добавлять новые функции к типу, но они не могут переопределять существующие функции». (источник: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html)

-> Расширения полезны, когда у вас нет доступа к классу, но вы хотите добавить некоторые функции. Используя расширения, вы можете разделить свои классы и настроить то, что класс может делать по мере необходимости.

person John    schedule 05.01.2016

Из документации Swift:

Расширения добавляют новые функции к существующему классу, структуре, перечислению или типу протокола. Это включает в себя возможность расширения типов, для которых у вас нет доступа к исходному коду (известное как ретроактивное моделирование).

Так что полезность этого заключается в том, что вы хотите расширить уже существующую реализацию. У Apple отличная документация, и я настоятельно рекомендую вам прочитать приведенную выше ссылку.

person rb612    schedule 05.01.2016
comment
Здесь речь идет об определении вашего собственного типа, а не о расширении существующего типа, для которого у вас нет исходного кода. - person Martin R; 05.01.2016