委托ve ProtokolKullanımı

iOS程序的发行人,发行人pro protokol konusunukapsamlıcaelealıyoruz。

参见“ Swift编程中的协议是什么”,另请参见Apple指南OLmaküzerebirçok教程以及biade蓝图ifadesigeçiyor。

协议定义了 适合特定任务或功能的方法,属性和其他要求 蓝图 然后,该协议可以 由类,结构或枚举采用,以提供这些要求的实际实现。 满足协议要求的任何类型都被称为符合该协议。

Ben de blueprint ifadesiüzerindengideceğimçünkügerçektenengüzelöyleanlaşılıyor。

Protokol Nedir?

Yazılımgeliştirmealanında蓝图ifadesini bir清单gibidüşünebiliriz。 蓝图bizimiçinuymamızgereken kurallarkümesianlamınıtaşımışoluyor。

Mesalasınıfabiryapıdahil ediyoruz ama bunu yaparkenbazıkurallara dikkat etmemiz gerekiyorçünkübir超类dan继承了etmişoluyoruz。

Protokoller de tam olarakböylebiryapı。

Protokolümetodlarlakullandığımızıvarsayalım。 Bu durumdaprotokolüçağıransınıfaometodlarınmutlaka ama mutlakakullanılmasıgerektiğinidikta ediyor。

Protokoldeki metodlar是必需的tanımlandıysakullanılmasımecburidir。 Eğer“ Optional” is kullanmak zorundadeğiliz。 Karışıklığıönlemekiçinbütünprotokolmetodlarının需要olduğunuvarsayalım。

亚妮

“Metodlarıniçinene yazarsan yaz umrumdadeğilama o fonksiyonlarçağırılacak。 !️⁉️”

diyor。

Analoji kullanmak gerekirseşöyleanlatabiliriz:

Eğerİnsanolmak istiyorsan kodyazmalısın以及其他yemelisin ve kahveiçmelisin。 iOS版本的ObjectiveC yazman umrumdadeğil,kodyazacaksın。

Et yiyeceksin:Antrikot mu yoksa gerdanmıseviyorsun o sanakalmış。

Kahveiçeceksin:İsterşekerliiç,姐姐şekersiz…

Zaten protokol is mi degünlükhayattakikullanılışamacındangeliyor。

Baştayetkili bir insan veya bir kurum var ve onunyetkilendirdiğibir protokol var。 Bu deregelerüstündekikişiveya kurumu temsil ediyor vegittiğiyerde onun yerine aksiyonalıyorlar。

Aynıgünümüzdekisendikalar gibi…

Yani durumuşöyleözetleyebiliriz。

Protokol :Yapılacaklarkümesi

代表 :Listedekigörev/görevlerdensorumlukişi

Protokol NeİşeYarar?

委托Protokolyapıları通信模式konusuiçindeyeralır。 Temelde ViewController lararasındaikiyönlüiletişimkurmamızısağlar。

ViewControllerlarınbirbiri ileiletişimkurmasınıntemelde 2 yoluvardır:

  • 代表与协议
  • 通知与观察员

Biz bu derte代表Pro prokolyapısınıelealıyoruz,通知观察员konusunu daha sonraanlatacağızinşallah🙏

Bildiğimizgibi ileriyönlüverigöndermekistediğimizzaman prepareForSegueyapısınıkullanıyoruz。

Buişzaten kolayçünküveriyi 2. sahneyaratılırkengönderiyoruz。

Peki ya 2. sahneden 1. sahneye verigöndermekistiyorsak吗?

O zaman prepareForSegue我准备好了YaramıyorçünküprepareForSegue了。

亚妮,kullanırızkullanmasınaama 2. VC(ViewController)den 1. VC ye segueoluşturmamızgerekir。

Bunuyaptığımızdaise她的1. ekranadöndüğümüzdebununkopyasınıoluşturmuşoluyoruz。

布达% 99koşuldaistemediğimizbir durum。

最好的ViewController’a geridönüşile ilgiliyazdığımÖncekiViewController’aDönmekyazımagözatabilirsiniz。

商业1. VC nin orijinal haline verigöndermekistiyoruz。 Dolayısıylabunu protokol ve delagate kullanarakyapmamızgerekiyor。

委托veprotokolünneolduğunu,和yaradığınıanladık。

Pekinasılkullanacağız? Sırabuna gelelim…

ProtokolNasılKullanılır

Lafıuzatmadan hemen kodkısmınageçelim,zaten yeterincekonuştuk😬

Önekuygulamamızda2 tane ViewController olacak。 1. ekrandan 2. ekranageçeceğizve 2. ekrandakiseçimimizi1. ekrana geriyönlügönderipbunu ekranayansıtacağız。

Başlıyoruz。 🔥🔥🔥

SingleView目录中的yaratalım。

Bir ViewController zaten var,bir tane dahaoluşturalımve bunlara arkaplan rengi verelim:

2.查看ViewController的外观。

1.图片浏览器按钮。

Ve约束ekleyelim。

ImageViewiçinIBOutlet属性检查器的内容内容方面适合diyelim,yoksa resmin en-boyoranıbozulur。

  @IBOutlet弱var myImageView:UIImageView! 

Ayrıcabu​​ton ile 2. ekranageçerken1. ve 2. ekrandakiiletişimikiminsağlayacağınıbelirtmemiz gerekiyor。

prepareForSegueyapısıile 2。

 覆盖func prepare(用于segue:UIStoryboardSegue,发件人:任意?){ 
如果segue.identifier ==“ goSegue” {
让vc = segue.destination为! SecondVC
vc.delegate =自我
}
}

BirşeyiselfdeğerineeşitlersenizbulunduğunuzViewController’aşumiudemişolursunuz:“ Bundan sonra bunla sen ilgileneceksin,bu seninsorumluluğun”。

Şimdibutonu 2. ekranageçişyapmakiçinkullanalım。 布农·伊辛(Bununiçin)提出了莫代尔式的türündesegueyaratalım。

Butonunyazısınıve puntosunudeğiştirirsenizdahagüzelolur。 Benkısaca“Geç” dedim。

身份识别标志tanımlayalım,prepareForSegue身份识别标志tanımlayalım。

图像2图像ImageViewyaratalım,约束条件完全不可用。

Objeyi控件+ D(重复)yaparakkopyalıyoruz。 在内容模式下,她的ImageView出现在“ Aspect Fit”屏幕上,状态为yaparsanızresminçö​​zünürlüğübozulmaz。

ImageView堆栈中的图像。

StackView e约束verelim。

StackViewseçiliykenaralarında10 birimboşlukolacağınıbelirtelim ve Fill同样等于seçeneğiniseçelim。 图片由ImageViewbütünalanıkaplar,dikkat edelim设计。

ViewController助手编辑器文件(命令+选项+输入)可从IBOutlet中下载。

ImageView leri dokunmaya hassas hale getirelim。 Birazdan bunlara手势ekleyerek aksiyonalmalarınısağlayacağız。

Bununiçin用户交互ayarınıaçıkkonuma getirmemiz gerekiyor。 在ImageView中查看。

her她的ImageViewüzerinebir点击手势sürükleyelim。

Amacımızayaklaşıyoruz…

您可以在互联网2上浏览资产和照片。

S️⚠️Sadece et resmi ileçalışır,Başkaresim denemeyin胆汁。

SecondVC支持重新创建ImageView。 TabikibunlarıviewDidLoad metoduiçindeyapıyoruz。

  firstImageView.image = UIImage(named:“ doner”) 
secondImageView.image = UIImage(名称:“ kokorec”)

Eğerprojeyi bu haliyleçalıştırırsak,俄罗斯:

商业安全和商务服务。 Daha sonra bu resmi ilkekranımızdagöstereceğiz。

Şimdiprotokol yazmazamanıgeldi…🤓

SecondVC的UIKitkütüphanesini导入ettiğimizyerin hemenaltınaprotokolümüzüyazalım。

 协议myProtocol {} 

Nedemiştik? Protokol neyinnasılkullanılacağınınlistesini tutuyor。

ProtokolüSecondVC可以在yazıyoruz的所有应用程序中使用。

Buprotokolüniçineyazdığımıztümdelegemetodlarını,değişkenleri对protokolüçağıransınıfın实施etmesi gerekiyor。

Bu derte protokoliçinesadece 1 adet需要metodyazacağız。 Protokoliçindeyazacağımızmetodun sadece is mini vealacağıparametreleri belirtiyoruz。

Fonksiyoniçiniburada doldurmuyoruz,burada sadecetanımlıyoruz,dikkat edelim。

Şimdiseçtiğimizresmi 1. ekranataşıyacakbir delege metoduyazalım。

  func myDelegateMethod(mealName:String) 

我的protokol协议。 Yani protokolşuanböyleoldu:

 协议myProtocol { 
func myDelegateMethod(mealName:String)
}

Protokolükullanmakiçinbunu birdeğişkeneatamamızgerekiyor。 Detanskentanımlayalım:

  var代表:myProtocol? 

Protokol代理人fonksiyonlarını 代理人 .feleksiyonuşeklindekullanacağız。

Bu delege metodunubazıaksiyonlar alarak doldurmak istiyoruz。 Buaksiyonları点击手势识别器yaratacağız。

Bununiçinresimlere dahaönce点击手势ekledik ki resmedokunduğumuzdaistediğimizaksiyonualsın。

bu手势lar sahnenin hemenüstündesırasıylagözükecek。 Hangi手势在hangi ImageView’ebağlıolduğunukarıştırırsanız手势可以显示一个手势。 Oradabağlantılarıgösterir。

Şimdiiki手势içinayrıayrıaksiyonyaratalım。

firstTapped fonksiyonudöneredokunduğumuzu,secondTapped fonksiyonu isekokoreçedokunduğumuzuima ediyor。

O zaman fonksiyoniçinişekildekigibidolduralım:

  @IBAction func firstTapped(_发送者:UITapGestureRecognizer){ 
委托?.myDelegateMethod(mealName:“ doner”)
解雇(动画:true)
}
  @IBAction func secondTapped(_发送者:UITapGestureRecognizer){ 
委托?.myDelegateMethod(mealName:“ kokorec”)
解雇(动画:true)
}

Buraya kadar neyaptık?

  • Protokolyazdıkveiçindebir metodkullanacağımızıbelirttik。
  • Protokol metodunaerişebilmekiçinprotokolAdıtipinde birdeğişkenyarattık。
  • İlgilifonksiyonlarda bu metoduniçinidoldurduk ve sahneyi解雇了ettik。

Artıkyapmamızgerekençokbasit。 1. ekrana geridöneceğizveseçtiğimizyemeğiekrandagöstereceğiz。

鹤门1.扩展edelim。

Ekler eklemez Xcode应用程序edecek☹️

妮耶 Çünkühatırlarsanızprotokole bir tane metodyazmıştık。 您可以通过henuzkullanmadığımız来解决问题。

修复diyelim。

  func myDelegateMethod(mealName:String){} 

Xcode bu metodusınıfadahil etti。

Yapacağımız儿子hareket etinüstüneinceden tuzserpiştirmek😋

Hatırlarsanız2. VC ninaksiyonlarında餐名Parametresine durumagöredönerveyakokoreçgöndermiştik。

餐名uu anda budeğeritutuyor。 O zaman anasayfaki ImageViewiçinebu resmibasalım。

  func myDelegateMethod(mealName:String){ 
myImageView.image = UIImage(命名为餐名)
}

她的塞米tamam,塞姆迪projeyiçalıştırmazamanı💻

Biraz uzun biryazıoldu amaistediğimiziyaptık💪

Yazıyıbeğendiysenizbikokoreçısmarlarsınızartık…Dönerde olur😁

Ya da sitemizi takiptekalıpsosyal mecralardapaylaşın,hangisikolayınızagelirse🙄

Projenin kaynak koduna iOSNotları— Githubsayfasındanulaşabilirsiniz。

iOS的iOS教程。

约鲁姆(Yorum),她的zamanaçığım。

İyikodlamalar💻

Interesting Posts