每天学一点Swift----面向对象上(九)

来源:互联网 发布:nba数据吧 编辑:程序博客网 时间:2024/05/22 17:17

十一.下标

 1. 访问数组、字典时的方式就是下标的用法。

 

 2. 所有的Swift类型(包括枚举、结构体、类)都支持定义下标。下标可以作为访问对象、集合或序列的简化方式。

 

 3. 同一个类型可以定义多个下标,Swift允许通过下标的形参列表或返回值类型不同重载下标。

 

 4. Swift中使用subscript关键字来定义下标,定义下标的语法为:

 subscript(形参列表) ->下标返回值类型

 {

  get{

  //getter部分的执行体,该部分必须要有返回值

  }

  [set(形参名)

  {

  //setter部分的执行体,该部分一个不能有返回值

  }]

 }

 

 

 5. 说明:下标的形参列表与函数的形参列表的用法基本相同,只是下标的形参列表 ***不支持***  指定外部参数,也不支持指定默认值。

 

 6. 程序对下标赋值时,Swift就转为调用对应的setter方法,至于在setter方法中做什么操作,Swift并不关心;程序访问下标时,Swift就调用对应的getter方法,至于getter方法中做了什么操作,Swift也并不关心,只要getter方法返回一个与类型相同的值即可。

 

 7. 举个栗子:

 struct FkRect

 {

  var x : Int 

  var y : Int

  var width : Int

  var height : Int

  //定义下标,指定下标只接受一个Int类型的参数,下标的返回值类型为Int

  subscript(idx : Int) -> Int

  {

  get{

  switch(idx)

  {

  case 0:

  return self.x

  case 1:

  return self.y

  case 2:

  return self.width

  case 3:

  return self.height

  default:

  break;

  }

  }

  //定义setter方法

  set{  //这里省略了setter部分的形参名,直接使用了swift提供的隐式形参名newValue

  switch(idx)

  {

  case 0:

  self.x = newValue

  case 1:

  self.y = newValue

  case 2:

  self.width = newValue

  case 3: 

  self.height = newValue

  default:

  break;

  }

  }

  }

 }

 

 

 //创建FkRect实例

 var rect = FkRect(x:20, y:30, width:200, height:400)

 //通过下标对rect的属性赋值

 rect[0] = 40

 rect[2] = 500

 //通过下标访问呢rect的属性

 print("rect矩形的左上角X坐标为:\(rect[0]),宽度为: \(rect[2])")

 

 

 8. 如果希望定义只读下标,则可以省略set部分。省略set部分之后,还可以省略get关键字和或括号。


上一篇:每天学一点Swift----面向对象上(八)

下一篇:每天学一点Swift----面向对象上(十)

原创粉丝点击