类型扩展

2016-07-12  本文已影响0人  霏誠拜咬o

扩展Extension

class Shape{
  func process(){
    print("Shape.process")
  }
}

class Rectangle:Shape{
  var x:Int
  var y:Int
  var length:Int
  var width:Int

  init(x:Int,y:Int,length:Int,width:Int){
    self.x=x
    self.y=y
    self.length=length
    self.width=width
  }
}

extension Rectangle{
  //var z=0
  static var max=100
  /*
  deinit{
  
  }*/

  /*override func process(){
    print("extension Rectangle process")
  }*/

  var area: Int{
    return self.length*self.width;
  }

  convenience init(x1:Int, y1:Int, x2:Int, y2:int){
    let l=abs(x2-x1)
    let w=abs(y2-y1)

    self.init(x:x1,y:y1,length:l,width:w)
  }

  func moveTo(x:Int, _ y:Int){
    self.x=x
    self.y=y
  }
}

var r=Renctangle(x1:1,y1:1,x2:10,y2:10)

print(Rectangle.max++)
print(r.area)
r.moveTo(3,3)

struct Point{
  var x=0
  var y=0
}
extension Point{
  mutating func moveTo(x:Int, _ y:Int){
    self.x=x
    self.y=y
  }
}
var p=Point()
p.moveTo(100,200)

extension String{
  func draw(){
    print(self)
  }
}
var str="Hello,Swift"
str.draw()

//定义协议
protocol Drawable{
  var discription: String{
    get
  }
  func draw()
}

//扩展实现协议
extension Rectangle: Drawable{
  var discription: String{
    return "[x=\(x),y=\(y),length=\(length),width=\(width)]"
  }
  func draw(){
    print(self.discription)
  }
  func erase(){
    print("Rectangle.erase")
  }
  //提供自己的实现
  /*
  func encode(){
    print("Rectangle.encode")
  }  */
}
r.draw()

//扩展协议类型
extension Drawable{
  //默认实现
  func encode(){
    print("Drawable.encode")
    print(self.discription)
  } 
}

r.encode()

var text:String
var array:Array<Int>
var table:Dictonary<String,Int>
var data:Int

使用扩展的注意点

协议与扩展

使用扩展的建议

上一篇 下一篇

猜你喜欢

热点阅读