Rumah pembangunan bahagian belakang Tutorial Python Swift中的协议(protocol)学习教程

Swift中的协议(protocol)学习教程

Jul 22, 2016 am 08:56 AM
protocol swift protokol

一、引言

协议约定了一些属性与方法,其作用类似Java中的抽象类,Swift中类型通过遵守协议来实现一些约定的属性和方法。Swift中的协议使用protocol关键字来声明。Swift中的协议还有一个十分有意思的特性,协议可以通过扩展来实现一些方法和附加功能。

二、在协议中定义属性和方法

协议中定义的属性只约定名称和类型,在具体类型的实现中,其可以是存储属性也可以是计算属性,协议中还需要指定属性是可读的还是可读可写的。示例代码如下:

protocol MyPortocol {
  //定义实例属性
  //可读的
  var name:String{get}
  //可读可写的
  var age:Int{set get}
  //可读的
  var nameAndAge:String{get}
  static var className:String{get}
}
class MyClass: MyPortocol {
  var name: String
  var age: Int
  var nameAndAge: String{
    get{
      return "\(name)"+"\(age)"
    }
  }
  static var className: String{
    get{
      return "MyClass"
    }
  }
  init(){
    name = "HS"
    age = 24
  }
}
Salin selepas log masuk

有一点需要注意,协议中的可读并不是只读,协议中的属性约定成可读可写,则在实现时,这个属性必须是可读可写的,但是如果协议中约定成可读的,则此属性可以是只读的也可以是可读可写的,看具体的实现。

协议中约定的方法可以是实例方法也可以是类型方法,示例如下:

protocol MyPortocol {
  func logName()
  static func logClassName()
}
class MyClass: MyPortocol {
  var name: String
  var age: Int
  init(){
    name = "HS"
    age = 24
  }
  func logName() {
    print(name)
  }
  static func logClassName() {
    print(className)
  }
}
Salin selepas log masuk

同样,协议中也可以对构造方法进行定义约定。

三、协议的特点

协议中虽然没有任何属性和方法的实现,但是其仍然可以当做类型来使用,在函数参数、返回值中应用广泛,示例如下:

protocol MyPortocol {
  //定义实例属性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  static func logClassName()
}
//将协议类型作为参数
func test(param:MyPortocol) {
  param.logName()
}
Salin selepas log masuk

协议作为类型这种用法另一个应用点是在集合类型中,协议可以作为所有遵守此协议的集合类型。

协议可以像其他类型一样进行继承,子协议将自动拥有父协议约定的属性和方法。协议也可以通过class关键字来定义只有类可以进行遵守,示例如下:

protocol MyPortocol {
  //定义实例属性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  static func logClassName()
}
//只有类可以继承此协议
protocol MySubPortocol:class,MyPortocol {
  
}
Salin selepas log masuk

协议既然可以像其他类型一样进行使用,当然它也可以使用is,as?,as!进行检查和转换,关于is,as的更多用法可以查看Swift关于类型转换的内容。

协议也可定义其中的属性或方法为可选的,即遵守此协议的类可以实现也可以不实现可选的属性和方法,然而,声明为可选的需要此协议为@objc类型的,示例如下:

@objc protocol MyPortocol {
  //定义实例属性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  //可选实现
  optional static func logClassName()
}
Salin selepas log masuk

Swift中的协议还有一个十分重要的特性,其可以通过扩展来进行属性、方法以及下标的实现。这对于一些通用类的方法十分方便,这相当于所有继承此协议的类都默认实现了这样的方法,示例如下:

protocol MyPortocol {
  //定义实例属性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  static func logClassName()
}
extension MyPortocol{
  var name:String{
    return "HS"
  }
}
Salin selepas log masuk

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Protokol manakah yang dimiliki oleh pengecasan pantas vivo? Protokol manakah yang dimiliki oleh pengecasan pantas vivo? Sep 06, 2022 pm 02:43 PM

Terdapat dua protokol utama untuk pengecasan pantas vivo: 1. Protokol pengecasan pantas "QC 2.0" "QC2.0" ialah teknologi "Quick Charge 2.0" Ia adalah versi 2.0 teknologi pengecasan pantas yang dikeluarkan oleh Qualcomm. 9V, dan 12V , 20V empat kumpulan voltan; 2. Protokol pengecasan pantas PD ialah spesifikasi pengecasan pantas yang dirumuskan oleh organisasi "USB-IF" Ia adalah salah satu protokol pengecasan pantas arus perdana dan boleh menjadikan kuasa maksimum lalai semasa "5V/2A" Antara muka "jenis-c" dinaikkan kepada 100W.

Apakah watt maksimum protokol pengecasan pantas PD3.0? Apakah watt maksimum protokol pengecasan pantas PD3.0? Nov 08, 2022 pm 04:04 PM

Protokol pengecasan pantas PD3.0 menyokong sehingga "100W". Pada November 2015, pengecasan pantas USB PD telah membawa kemas kini versi utama dan memasuki era pengecasan pantas USB PD3.0, protokol PD3.0 menyokong output 5V3A, 9V3A, 12V3A, 15V3A dan 20V5A, dan kuasa maksimum boleh mencapai; 100W Bukan sahaja boleh digunakan untuk mengecas telefon bimbit, dan juga boleh digunakan untuk menghidupkan komputer riba atau monitor.

Apple mengeluarkan pakej Swift sumber terbuka untuk penyulitan homomorfik, digunakan dalam iOS 18 Apple mengeluarkan pakej Swift sumber terbuka untuk penyulitan homomorfik, digunakan dalam iOS 18 Jul 31, 2024 pm 01:10 PM

Menurut berita pada 31 Julai, Apple mengeluarkan kenyataan akhbar semalam (30 Julai), mengumumkan pelancaran pakej Swift sumber terbuka baharu (swift-homomorphic-encryption) untuk membolehkan penyulitan homomorphic dalam bahasa pengaturcaraan Swift. Nota: Penyulitan Homomorfik (HE) merujuk kepada algoritma penyulitan yang memenuhi sifat operasi homomorfik teks sifir Iaitu, selepas data disulitkan secara homomorfik, pengiraan khusus dilakukan pada teks sifir, dan hasil pengiraan teks sifir yang diperolehi diproses pada masa yang sama. masa. Teks biasa selepas penyahsulitan keadaan adalah bersamaan dengan melakukan pengiraan yang sama secara langsung pada data teks biasa, mencapai "halimunan" data. Teknologi penyulitan homomorfik boleh mengira data yang disulitkan tanpa membocorkan data asas yang tidak disulitkan kepada proses operasi.

Bagaimana untuk mengkonfigurasi dan menggunakan protokol proksi dalam nginx Bagaimana untuk mengkonfigurasi dan menggunakan protokol proksi dalam nginx May 18, 2023 am 08:47 AM

Apabila proxyprotocol digunakan dalam nginx, kami tahu bahawa nginx ialah pelayan web dan pelayan proksi Ia biasanya berfungsi di belakang pelayan proksi atau perisian pengimbangan beban (Haproxy, Amazon Elastic LoadBalancer (ELB) pertama kali meminta pelayan proksi atau perisian pengimbangan beban LSB. dan kemudian untuk nginx Lakukan akses web sebenar Kerana ia telah melalui pelbagai lapisan perisian, beberapa maklumat pelanggan seperti alamat IP, nombor port, dll. mungkin disembunyikan, yang memudaratkan analisis masalah dan statistik data kami, kerana untuk nginx. , Kami mahu mendapat pelanggan sebenar

Penyepaduan bahasa Vue.js dan Swift, cadangan untuk pembangunan dan ujian aplikasi iOS lanjutan Penyepaduan bahasa Vue.js dan Swift, cadangan untuk pembangunan dan ujian aplikasi iOS lanjutan Aug 01, 2023 am 09:53 AM

Vue.js ialah rangka kerja JavaScript yang popular untuk membina antara muka pengguna. Bahasa Swift ialah bahasa pengaturcaraan yang digunakan untuk pembangunan aplikasi iOS dan macOS. Dalam artikel ini, saya akan meneroka cara mengintegrasikan Vue.js dengan bahasa Swift untuk pembangunan dan ujian aplikasi iOS lanjutan. Sebelum kami bermula, kami perlu memastikan anda memasang perisian dan alatan berikut: Xcode: persekitaran pembangunan bersepadu untuk membangun dan menyusun aplikasi iOS. Node.js: digunakan untuk

Apakah 5 protokol komunikasi industri? Apakah 5 protokol komunikasi industri? Sep 28, 2022 am 11:52 AM

5 jenis protokol komunikasi industri: 1. Protokol Modbus, yang merupakan bahasa universal yang digunakan dalam pengawal elektronik; 2. Protokol RS-232, yang merupakan standard antara muka fizikal bersiri; berdasarkan; 4. Protokol HART ialah protokol komunikasi yang digunakan antara instrumen pintar di tapak dan peralatan bilik kawalan 5. Protokol MPI ialah protokol komunikasi silang bahasa yang digunakan untuk menulis komputer selari.

Cara menggunakan MySQL untuk melaksanakan fungsi import dan eksport data dalam Swift Cara menggunakan MySQL untuk melaksanakan fungsi import dan eksport data dalam Swift Aug 01, 2023 pm 11:57 PM

Cara melaksanakan fungsi import dan eksport data dalam Swift menggunakan MySQL Mengimport dan mengeksport data adalah salah satu fungsi biasa dalam banyak aplikasi. Artikel ini akan menunjukkan cara menggunakan pangkalan data MySQL untuk mengimport dan mengeksport data dalam bahasa Swift, dan memberikan contoh kod. Untuk menggunakan pangkalan data MySQL, anda perlu memperkenalkan fail perpustakaan yang sepadan terlebih dahulu ke dalam projek Swift. Anda boleh melakukan ini dengan menambah kebergantungan berikut dalam fail Package.swift: dependencies:[

Panduan Protokol SOAP dalam PHP Panduan Protokol SOAP dalam PHP May 20, 2023 pm 07:10 PM

Dengan pembangunan berterusan teknologi Internet, semakin banyak aplikasi peringkat perusahaan perlu menyediakan antara muka kepada aplikasi lain untuk merealisasikan interaksi data dan perniagaan. Dalam kes ini, kami memerlukan protokol yang boleh dipercayai untuk menghantar data dan memastikan integriti dan keselamatan data. SOAP (Simple Object Access Protocol) ialah protokol berasaskan XML yang boleh digunakan untuk melaksanakan komunikasi antara aplikasi dalam persekitaran Web. Sebagai bahasa pengaturcaraan web yang popular, PHP

See all articles