Нативная разработка мобильных приложений


Использование расширений для организации кода



Download 3,69 Mb.
Pdf ko'rish
bet140/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   136   137   138   139   140   141   142   143   ...   228
Bog'liq
Нативная разработка мобильных приложений

Использование расширений для организации кода
Поскольку расширения являются неотъемлемой частью языка Swift, в проек
-
тах на Swift стало обычной практикой применять расширения для организа
-
ции кода. Например, этот прием часто используется для размещения реализа
-
ций протоколов после определений классов.
Например:
protocol AwesomeProtocol {
func beAwesome()
}
class ExtendableObect { /* ... */ }
extension ExtendableObect: AwesomeProtocol {
func beAwesome() {
print("You are awesome!")
}
}
Здесь сначала объявляется новый протокол 
AwesomeProtocol
с обязательным 
методом 
beAwesome()
. А затем определяется 
ExtendableObject
. Вообще говоря, 
протокол можно реализовать, объявив его как наследуемый класс в определе
-
нии 
Extend
ableObject
:
class ExtendableObject: AwesomeProtocol { /* ... */}
Однако из-за природы Swift, ориентированной на протоколы, такой под
-
ход может стать излишне громоздким и сложным, так как количество про
-
токолов, которые должен реализовать объект, может расти с увеличением 
сложности приложения. Предыдущий пример с отдельным расширением по
-
зволяет определить поддержку протокола и упростить его поиск и поддержку 
в будущем.
Это совершенно субъективный способ организации кода, но он превратился 
в стандарт де-факто в сообществе Swift. Вы, в свою очередь, можете сами для 
себя решить, использовать его или не использовать!
Кстати, коль скоро речь зашла о протоколах в Swift, отметим, что протоколы 
тоже можно расширять! Давайте посмотрим, как это делается.


iOS 

211
Расширение протоколов
Расширение протоколов в Swift осуществляется немного иначе, чем расшире
-
ние классов и структур. Синтаксис тот же, но механизм, стоящий за ним, от
-
личается. Вот как можно расширить протокол в Swift:
protocol ExtendableProtocol {
func doSomething()
}
extension ExtendableProtocol {
func printSomething() {
print("Something :)")
}
}
class SomeObject: ExtendableProtocol {
func doSomething() {
// ...
}
}
Протокол, расширенный здесь, – это не протокол Objective­C, написанный на Swift, 
это чистый объект Swift. Это важно понимать, потому что расширить можно только 
чистые протоколы Swift. Аналогично нельзя расширить методы с префиксом 
@objc
.
В этом примере создается протокол 
ExtendableProtocol
с методом 
doSome­
thing()
. Следующее ниже расширение добавляет в протокол новый метод 
print­
Something
. Наконец, в самом низу объявляется класс 
SomeObject
, реализующий 
протокол 
ExtendableProtocol
.
Вот как можно использовать экземпляр 
SomeObject
:
let object = SomeObject()
object.doSomething()
object.printSomething()
Довольно просто и не слишком отличается от использования расширений 
классов и структур, разве не так?
Преимущества расширений протоколов становятся особенно очевидными, 
когда возникает необходимость определить функциональные возможности, 
общие для разных объектов, не наследующих один и тот же базовый класс. 
Взгляните:
protocol Typeable { /* ... */ }
extension Typeable {
func printType() {
let objectType = String(describing: type(of: self))
print("This object is a type of \(objectType)")
}
}
class BaseClassA { }
class BaseClassB { }
class BaseClassC { }


212

Расширения
class TacoTruck: BaseClassA, Typeable { }
class Dog: BaseClassB, Typeable { }
class Cat: BaseClassC, Typeable { }
let tacoTruck = TacoTruck()
let dog = Dog()
let cat = Cat()
tacoTruck.printType()
dog.printType()
cat.printType()
В этом примере сначала объявляется протокол 
Typeable
и расширение для 
него, которое выводит тип объекта. Затем объявляются три базовых класса, 
никак не связанных между собой. Далее объявляются три дочерних класса – 
каждый наследует свой родительский класс, отличный от других, но все они 
реализуют протокол 
Typeable
. После этого создаются экземпляры дочерних 
классов. И наконец, для каждого из них вызывается один тот же метод 
print­
Type
, объявленный в одном месте и функционирующий абсолютно одинаково 
для всех объектов.
Расширения протоколов – это мощное дополнение, реализованное в Swift, 
которое помогает писать более чистый, простой и легко читаемый код.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   136   137   138   139   140   141   142   143   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish