Swift协议
面向协议( 主要内容:
协议扩展是苹果新的面向协议编程的支柱,是Swift编程语言最重要的特定之一。使用协议扩展,我们能够为遵守协议的任何类型提供方法与属性实现。 协议作为类型在Swift编程语言中,协议可以被看作为一种类型,像其他任何类型那样使用。这意味着协议可以作为函数的参数类型或者返回值类型。我们也可以使用它们来作为变量、常量与集合的类型 protocol PersonProtocol {
var firstName: String {get set}
var lastName: String {get set}
var birthDate: NSDate {get set}
var profession: String {get}
init (firstName: String,lastName: String,birthDate: NSDate)
}
func updatePerson(person: PersonProtocol) -> PersonProtocol {
return person
}
var myPerson: PersonProtocol
var people: [PersonProtocol] = []
使用协议实现多态在编程语言中,多态是多种类型的单一接口( 当使用协议来获取实例时,只能使用定义在该协议中的属性与方法。如果想要使用特定个体类型中的属性或方法,需要将实例映射到那个类型。 协议中的类型映射类型映射( for person in people {
if person is SwiftProgrammer {
}
}
for person in people {
switch (person) {
case is SwiftProgrammer:
case is FootballPlayer:
default:
}
}
协议扩展协议扩展允许我们扩展协议来为遵守协议的类型提供方法与属性实现,它们也允许我们为所有遵守协议的类型提供普通的实现来减少为每个单独类型提供实现的需要或者创建类层次的需要。 一旦在协议中定义方法(只能在协议中定义方法,而不能实现方法),那么必须要在遵守协议的每个类型中对方法进行实现: protocol DogProtocol {
var name: String {get set}
var color: String {get set}
func walk() -> String
}
struct JackRussel: DogProtocol {
var name: String
var color: String
func walk() -> String {
return "jackRussel walks"
}
}
我们可以在协议之外定义方法,并且定义它的默认行为: protocol DogProtocol {
var name: String {get set}
var color: String {get set}
}
extension DogProtocol {
func speak() -> String {
return "Animal speak"
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |