美文网首页
swift中的方法

swift中的方法

作者: hello_bear | 来源:发表于2017-12-18 09:29 被阅读23次

    方法是关联了特定类型的函数。类,结构体以及枚举都能定义实例方法,方法封装了给定类型特定的任务和功能。类,结构体和枚举同样可以定义类型方法,这是与类型本身关联的方法。类型方法与Objective-C中的类方法相似。

    事实上在 结构体和枚举中定义方法是 Swift 语言与 C 语言和 Objective-C 的主要区别。在 Objective-C 中,类是 唯一能定义方法的类型。但是在 Swift ,你可以选择无论类,结构体还是方法,它们都拥有强大的灵活性来在你 创建的类型中定义方法。

    一、实例方法

    实例方法是属于特定类实例、结构体实力老或者枚举实例的函数。
    实例方法与函数的语法完全相同。

    实例方法默认可以访问同类下所有其他实例方法和属 性。实例方法只能在类型的具体实例里被调用。它不能在独立于实例而被调用。

    1、self属性

    每一个类的实例都隐含一个叫做 self的属性,它完完全全与实例本身相等。你可以使用 self属性来在当前实例当中调用它自身的方法。
    实际上,你不需要经常在代码中写 self。

    1  struct Point {
    2      var x = 0.0, y = 0.0
    3      func isToTheRightOf(x: Double) -> Bool {
    4         return self.x > x
    5      } 
    6  }
    

    除去 self 前缀,Swift 将会假定两个 x 都是叫做 x 的方法形式参数。

    2、在实例方法中修改值类型

    结构体和枚举是值类型。默认情况下,值类型属性不能被自身的实例方法修改。
    总之,如果你需要在特定的方法中修改结构体或者枚举的属性,你可以选择将这个方法异变。然后这个方法就可 以在方法中异变(嗯,改变)它的属性了,并且任何改变在方法结束的时候都会写入到原始的结构体中。方法同 样可以指定一个全新的实例给它隐含的 self属性,并且这个新的实例将会在方法结束的时候替换掉现存的这个实 例。
    你可以选择在 func关键字前放一个 mutating关键字来使用这个行为:

    1  struct Point {
    2      var x = 0.0, y = 0.0
    3      mutating func moveBy(x deltaX: Double, y deltaY: Double) {
    4          x += deltaX 
    5          y += deltaY
    6      }
    7  }
    8 var somePoint = Point(x: 1.0, y: 1.0)
    9 somePoint.moveBy(x: 2.0, y: 3.0)
    10 print("The point is now at (\(somePoint.x), \(somePoint.y))")
    11 // prints "The point is now at (3.0, 4.0)"
    
    3、在异变方法里指定自身
    1  struct Point {
    2      var x = 0.0, y = 0.0
    3      mutating func moveBy(x deltaX: Double, y deltaY: Double) {
    4          self = Point(x: x + deltaX, y: y + deltaY)
    5      }
    6  }      
    

    这次的异变方法 moveBy(x:y:)创建了一个 x和 y设置在目的坐标的全新的结构体。调用这个版本的方法和的结果 会和之前那个完全一样。

    枚举的异变方法可以设置隐含的 self属性为相同枚举里的不同成员:

    1  enum TriStateSwitch {
    2      case off, low, high
    3      mutating func next() {
    4          switch self {
    5          case .off:
    6              self = .low
    7          case .low:
    8              self = .high
    9          case .high:
    10             self = .off
    11          }
    12      }
    13  }
    14  var ovenLight = TriStateSwitch.low
    15  ovenLight.next()
    16  // ovenLight is now equal to .high
    17  ovenLight.next()
    18  // ovenLight is now equal to .off
    

    这个栗子定义了一个三种开关状态的枚举。每次调用 next()方法时,这个开关就会在三种不同的电力状态( Off , low和 high)下切换。

    二、类型方法

    定义在类型本身调用的方法,被称为类型方法
    你可以通过在 func关键字之前使用 static关键字来明确一个类型方法。类同样可以使用 class关键字来允许子类重写父类对类型方法的实现。

    注意:在 Objective-C 中,你只能在 Objective-C 的类中定义类级别的方法。但是在 Swift 里,你可以在所有的类里定义类级别的方法,还有结构体和枚举。每一个类方法都能够对它自身的类范围显式生效。

    类型方法和实例方法一样使用点语法调用。不过,你得在类上调用类型方法,而不是这个类的实例

    相关文章

      网友评论

          本文标题:swift中的方法

          本文链接:https://www.haomeiwen.com/subject/lyckwxtx.html