协议(Protocol)

206 阅读1分钟

协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之间用逗号隔开)

protocol Drawable { 
  func draw() 
  var x: Int { get set } // 可读可写的声明,实现协议也必须是可读可写的
  var y: Int { get } // 可读的声明,实现协议可以是可读可写的,也可以是可读的
  subscript(index: Int) -> Int { get set } 
}
  • 协议中定义方法时不能有默认参数值
  • 默认情况下,协议中定义的内容必须全部都实现
  • 也有办法办到只实现部分内容
class Person : Drawable { 
  var x: Int { 
    get { 0 } 
    set {} 
  } 
  var y: Int { 0 } 
  func draw() { print("Person draw") } 
  subscript(index: Int) -> Int { 
    set {} 
    get { index } 
  } 
} 
  • 协议中定义属性时必须用var关键字
  • 实现协议时的属性权限要不小于协议中定义的属性权限
  • 协议定义get、set,用var存储属性或get、set计算属性去实现
  • 协议定义get,用任何属性都可以实现