}
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 运行上面的程序,得到以下结果。








