深入解析Swift语言中的协议

2020-01-08 22:38:09王旭

}

func print(celebrator: protocol<stname, stage>) {
   println("(celebrator.name) is (celebrator.age) years old")
}

let studname = Person(name: "Priya", age: 21)
print(studname)

let stud = Person(name: "Rehan", age: 29)
print(stud)

let student = Person(name: "Roshan", age: 19)
print(student)


当我们使用 playground 运行上面的程序,得到以下结果。

 


Priya is 21 years old
Rehan is 29 years old
Roshan is 19 years old

检查协议一致性
协议一致性是 is 和 as 类似于类型转换的操作符测试。

如果一个实例符合协议标准,is运算符如果失败返回false ,否则返回true。

as? 版本是向下转型操作符,返回协议的类型的可选值,并且如果该值是nil ,实例不符合该协议。

as 版是向下转型操作符,强制向下转型的协议类型并触发一个运行时错误,如果向下转型不会成功。

复制代码
 import Foundation

 

@objc protocol rectangle {
   var area: Double { get }
}

@objc class Circle: rectangle {
   let pi = 3.1415927
   var radius: Double
   var area: Double { return pi * radius * radius }
   init(radius: Double) { self.radius = radius }
}

@objc class result: rectangle {
   var area: Double
   init(area: Double) { self.area = area }
}


class sides {
   var rectsides: Int
   init(rectsides: Int) { self.rectsides = rectsides }
}

let objects: [AnyObject] = [Circle(radius: 2.0),result(area: 198),sides(rectsides: 4)]

for object in objects {
   if let objectWithArea = object as? rectangle {
      println("Area is (objectWithArea.area)")
   } else {
      println("Rectangle area is not defined")
   }
}


当我们使用 playground 运行上面的程序,得到以下结果。