protocol AProtocol: BProtocol {
/// content to be shown on disclaimer Label of cell
var disclaimer: String {get set}
var cellDisclaimerAttributed: NSAttributedString {get}
var showSelection: Bool {get set}
var isReadMore: Bool {get}
}
Je veux rendre les variables facultatives afin de ne pas avoir à implémenter toutes les variables à chaque fois après la conformité du protocole. Comme dans Objective-C, nous l'avons fait pour les méthodes:
protocol AProtocol: BProtocol {
/// content to be shown on disclaimer Label of cell
optional var disclaimer: String {get set}
optional var cellDisclaimerAttributed: NSAttributedString {get}
optional var showSelection: Bool {get set}
optional var isReadMore: Bool {get}
}
C'est possible?
protocol TestProtocol {
var name : String {set get}
var age : Int {set get}
}
Fournissez une extension par défaut pour le protocole. Fournissez l'implémentation par défaut pour toutes les variables définies et obtenez celles que vous souhaitez qu'elles soient facultatives.
Dans le protocole ci-dessous, le nom et l'âge sont facultatifs.
extension TestProtocol {
var name: String {
get { return "Any default Name" } set {}
}
var age : Int { get{ return 23 } set{} }
}
Maintenant, si je suis conforme au protocole ci-dessus à toute autre classe, comme
class TestViewController: UIViewController, TestProtocol{
var itemName: String = ""
**I can implement the name only, and my objective is achieved here, that the controller will not give a warning that "TestViewController does not conform to protocol TestProtocol"**
var name: String {
get {
return itemName ?? ""
} set {}
}
}
Si vous voulez conforme à la documentation de Swift , vous devez l'implémenter comme ceci:
@objc protocol Named {
// variables
var name: String { get }
@objc optional var age: Int { get }
// methods
func addTen(to number: Int) -> Int
@objc optional func addTwenty(to number: Int) -> Int
}
class Person: Named {
var name: String
init(name: String) {
self.name = name
}
func addTen(to number: Int) -> Int {
return number + 10
}
}