Maison développement back-end Tutoriel Python Swift中的协议(protocol)学习教程

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

Jul 22, 2016 am 08:56 AM
protocol swift 协议

一、引言

协议约定了一些属性与方法,其作用类似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
  }
}
Copier après la connexion

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

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

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)
  }
}
Copier après la connexion

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

三、协议的特点

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

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()
}
Copier après la connexion

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

协议可以像其他类型一样进行继承,子协议将自动拥有父协议约定的属性和方法。协议也可以通过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 {
  
}
Copier après la connexion

协议既然可以像其他类型一样进行使用,当然它也可以使用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()
}
Copier après la connexion

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"
  }
}
Copier après la connexion

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

À quel protocole appartient la charge rapide Vivo ? À quel protocole appartient la charge rapide Vivo ? Sep 06, 2022 pm 02:43 PM

Il existe deux protocoles principaux pour la charge rapide vivo : 1. Le protocole de charge rapide « QC 2.0 » est la technologie « Quick Charge 2.0 ». Il s'agit de la version 2.0 de la technologie de charge rapide publiée par Qualcomm. 9 V et 12 V, 20 V quatre groupes de tension ; 2. Le protocole de charge rapide PD est une spécification de charge rapide formulée par l'organisation « USB-IF ». Il s'agit de l'un des protocoles de charge rapide courants actuels et peut atteindre la puissance maximale par défaut actuelle. "5V/2A" L'interface "type-c" est augmentée à 100W.

Quelle est la puissance maximale du protocole de charge rapide PD3.0 ? Quelle est la puissance maximale du protocole de charge rapide PD3.0 ? Nov 08, 2022 pm 04:04 PM

Le protocole de charge rapide PD3.0 prend en charge jusqu'à « 100 W ». En novembre 2015, la charge rapide USB PD a inauguré une mise à jour majeure de la version et est entrée dans l'ère de la charge rapide USB PD3.0 ; le protocole PD3.0 prend en charge les sorties 5V3A, 9V3A, 12V3A, 15V3A et 20V5A, et la puissance maximale peut atteindre 100 W. Il peut non seulement être utilisé pour charger des téléphones mobiles, mais également pour alimenter des ordinateurs portables ou des moniteurs.

Apple publie le package Swift open source pour le cryptage homomorphe, déployé dans iOS 18 Apple publie le package Swift open source pour le cryptage homomorphe, déployé dans iOS 18 Jul 31, 2024 pm 01:10 PM

Selon l'actualité du 31 juillet, Apple a publié hier (30 juillet) un communiqué de presse annonçant le lancement d'un nouveau package Swift open source (swift-homomorphic-encryption) permettant le cryptage homomorphe dans le langage de programmation Swift. Remarque : Le chiffrement homomorphe (HE) fait référence à un algorithme de chiffrement qui satisfait aux propriétés d'opération homomorphe du texte chiffré. Autrement dit, une fois les données chiffrées de manière homomorphe, des calculs spécifiques sont effectués sur le texte chiffré et les résultats de calcul du texte chiffré obtenus sont traités en même temps. Le texte en clair après le décryptage de l'état équivaut à effectuer directement le même calcul sur les données en texte en clair, obtenant ainsi « l'invisibilité » des données. La technologie de cryptage homomorphe peut calculer les données cryptées sans divulguer les données non cryptées sous-jacentes au processus opérationnel.

Comment configurer et utiliser le protocole proxy dans nginx Comment configurer et utiliser le protocole proxy dans nginx May 18, 2023 am 08:47 AM

Lorsque le protocole proxy est utilisé dans nginx, nous savons que nginx est un serveur Web et un serveur proxy. Il fonctionne généralement derrière un serveur proxy ou un logiciel d'équilibrage de charge (Haproxy, Amazon Elastic LoadBalancer (ELB)). puis à nginx Effectuer un véritable accès au Web. Parce qu'il a traversé plusieurs couches de logiciel, certaines informations client telles que l'adresse IP, le numéro de port, etc. peuvent être masquées, ce qui est préjudiciable à notre analyse des problèmes et à nos statistiques de données, car pour nginx. , Nous voulons pouvoir avoir de vrais clients

Intégration du langage Vue.js et Swift, suggestions de développement et tests d'applications iOS avancées Intégration du langage Vue.js et Swift, suggestions de développement et tests d'applications iOS avancées Aug 01, 2023 am 09:53 AM

Vue.js est un framework JavaScript populaire pour créer des interfaces utilisateur. Le langage Swift est un langage de programmation utilisé pour le développement d'applications iOS et macOS. Dans cet article, j'explorerai comment intégrer Vue.js au langage Swift pour le développement et les tests avancés d'applications iOS. Avant de commencer, nous devons nous assurer que vous disposez des logiciels et outils suivants : Xcode : un environnement de développement intégré pour développer et compiler des applications iOS. Node.js : utilisé pour

Quels sont les 5 protocoles de communication industrielle ? Quels sont les 5 protocoles de communication industrielle ? Sep 28, 2022 am 11:52 AM

5 types de protocoles de communication industriels : 1. Protocole Modbus, qui est un langage universel utilisé dans les contrôleurs électroniques ; 2. Protocole RS-232, qui est une norme d'interface physique série 3. Protocole RS-485, basé sur RS232 développé ; sur la base de : 4. Le protocole HART est un protocole de communication utilisé entre les instruments intelligents sur site et les équipements de la salle de contrôle ; 5. Le protocole MPI est un protocole de communication multilingue utilisé pour écrire des ordinateurs parallèles.

Comment utiliser MySQL pour implémenter les fonctions d'importation et d'exportation de données dans Swift Comment utiliser MySQL pour implémenter les fonctions d'importation et d'exportation de données dans Swift Aug 01, 2023 pm 11:57 PM

Comment implémenter les fonctions d'importation et d'exportation de données dans Swift à l'aide de MySQL L'importation et l'exportation de données sont l'une des fonctions courantes dans de nombreuses applications. Cet article montrera comment utiliser la base de données MySQL pour importer et exporter des données en langage Swift et fournira des exemples de code. Pour utiliser la base de données MySQL, vous devez d'abord introduire le fichier de bibliothèque correspondant dans le projet Swift. Vous pouvez le faire en ajoutant les dépendances suivantes dans le fichier Package.swift : dependencies :[

Guide du protocole SOAP en PHP Guide du protocole SOAP en PHP May 20, 2023 pm 07:10 PM

Avec le développement continu de la technologie Internet, de plus en plus d'applications au niveau de l'entreprise doivent fournir des interfaces avec d'autres applications pour réaliser l'interaction des données et des activités. Dans ce cas, nous avons besoin d’un protocole fiable pour transmettre les données et garantir leur intégrité et leur sécurité. SOAP (Simple Object Access Protocol) est un protocole basé sur XML qui peut être utilisé pour implémenter la communication entre des applications dans un environnement Web. En tant que langage de programmation Web populaire, PHP

See all articles